Я пытаюсь взять некоторый рабочий код и изменить с urlib2 на запросы. Исходный код содержит основную регистрационную информацию о имени пользователя, пароле и сообщениях KEY и SECRET в заголовке запроса urllib2. Следующий код - это моя попытка перейти на использование модуля запросов и получить некоторые функции для создания дополнительных вызовов API. Я пробовал десятки комбинаций, и все возвращают код 400. По-видимому, мой код запросов не дает необходимой информации, чтобы вернуть ответ 200 и предоставить нужный токен авторизации.перейти от urllib2 к запросам python 2.7
## Import needed modules
import urllib2, urllib, base64
import httplib
import requests
import json
## initialize variables
KEY = "7f1xxxx-3xxx-4xxx-9a7f-8be66839dede"
SECRET = "45xxxxxx-45xxx-469a-9ae9-a7927a76cfeb"
userName = "[email protected]"
passWord = "mypassword"
URL = "https://company.com/auth/token"
token = None
sessionid = None
DATA = urllib.urlencode({"grant_type":"password",
"username":userName,
"password":passWord})
base64string = base64.encodestring('%s:%s' % (KEY, SECRET)).replace('\n', '')
request = urllib2.Request(URL, DATA)
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
token = result.read()
print token
Это возвращает мой токен авторизации, и все хорошо. Я могу передать токен на сервер авторизации и иметь полный доступ к api для взаимодействия с базой данных. Ниже приведена попытка использования запросов и добавление дополнительных функций.
client = requests.session()
payload = {"grant_type":"password",
"username":userName,
"password":passWord,
"applicationId": KEY
}
headers = {'content-type':'application/json',
"grant_type":"password",
"username":userName,
"password":passWord,
'applicationsId': KEY,
'Authorization': base64string,
'token': token,
'sessionid': sessionid
}
response = client.post(URL, params = payload, headers=headers)
token = response.content
print token
{"error":"invalid_request"}
print response
<Response [400]>
Спасибо за пример @stoer. Я пробовал это и все еще получал 400 ответов. Я обнаружил, что если data = полезная нагрузка используется вместо params = работа с полезной нагрузкой. Ошибка auth = HTTPBasicAuth не помогла или не помешала. –