我正在嘗試一些工作代碼並從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 = payload而不是params = payload有效。 auth = HTTPBasicAuth沒有幫助或阻礙。 –