"unsupported_grant_type" 使用 Google 的 urlfetch 从 PayPal 获取 oauth 令牌时。使用 "requests" 有效
"unsupported_grant_type" when using Google's urlfetch to get an oauth token from PayPal. Using "requests" works
我一直在尝试(但惨遭失败)使用 google 的 urlfetch 模块(python 在 App Engine 的本地服务器中)从 paypal 检索令牌。它使用 App Engine 的“请求”模块 outside 工作如下:
url = base + "/v1/oauth2/token"
payload = {
'grant_type': 'client_credentials',
}
auth_encoded = APP_CLIENT_ID + ":" + APP_SECRET
auth_encoded = base64.b64encode(auth_encoded)
##headers = {'Content-Type': 'application/json', 'Authorization': 'Basic ' + auth_encoded}
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ' + auth_encoded}
r = requests.post(url,headers=headers,params=payload)
print r.text
...但是在使用 urlfetch 尝试同样的事情时我收到了这条消息:
{"error":"unsupported_grant_type","error_description":"Grant Type is NULL"}
...这是我正在使用的代码:
url = base + "/v1/oauth2/token"
payload = {"grant_type": "client_credentials"}
auth_encoded = APP_CLIENT_ID + ":" + APP_SECRET
auth_encoded = base64.b64encode(auth_encoded)
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ' + auth_encoded}
result = urlfetch.fetch(
url=url,
method=urlfetch.POST,
headers=headers,
payload = payload
)
...我已经尝试了所有我能想到的。应该是很简单的事情。
此 API 调用的格式为 application/x-www-form-urlencoded
,而不是 JSON。
因此:
payload = "grant_type=client_credentials"
或
import urllib
payload = urllib.urlencode({"grant_type": "client_credentials"})
我一直在尝试(但惨遭失败)使用 google 的 urlfetch 模块(python 在 App Engine 的本地服务器中)从 paypal 检索令牌。它使用 App Engine 的“请求”模块 outside 工作如下:
url = base + "/v1/oauth2/token"
payload = {
'grant_type': 'client_credentials',
}
auth_encoded = APP_CLIENT_ID + ":" + APP_SECRET
auth_encoded = base64.b64encode(auth_encoded)
##headers = {'Content-Type': 'application/json', 'Authorization': 'Basic ' + auth_encoded}
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ' + auth_encoded}
r = requests.post(url,headers=headers,params=payload)
print r.text
...但是在使用 urlfetch 尝试同样的事情时我收到了这条消息:
{"error":"unsupported_grant_type","error_description":"Grant Type is NULL"}
...这是我正在使用的代码:
url = base + "/v1/oauth2/token"
payload = {"grant_type": "client_credentials"}
auth_encoded = APP_CLIENT_ID + ":" + APP_SECRET
auth_encoded = base64.b64encode(auth_encoded)
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ' + auth_encoded}
result = urlfetch.fetch(
url=url,
method=urlfetch.POST,
headers=headers,
payload = payload
)
...我已经尝试了所有我能想到的。应该是很简单的事情。
此 API 调用的格式为 application/x-www-form-urlencoded
,而不是 JSON。
因此:
payload = "grant_type=client_credentials"
或
import urllib
payload = urllib.urlencode({"grant_type": "client_credentials"})