我无法将curl代码转换为python,以便将令牌访问到API。
给定的代码是:
curl -k -d "grant_type=client_credentials&scope=PRODUCTION" -H "Authorization :Basic <long base64 value>, Content-Type: application/x-www-form-urlencoded" https://api-km.it.umich.edu/token
我知道-H表示标题,但我不知道如何处理-d。到目前为止,我有:
authorizationcode = 'username:password'
authorizationcode = base64.standard_b64encode(authorizationcode)
header = {'Authorization ': 'Basic ' + authorizationcode, 'Content-Type': 'application/x-www-form-' + authorizationcode}
r = requests.post('https://api-km.it.umich.edu/token',
data = 'grant_type=client_credentials&scope=PRODUCTION',
headers = header)
另外,这些是说明:
从API目录中获取您的使用者密钥和使用者密钥。这些是在应用程序成功订阅API后在“订阅”页面上生成的。 将消费者密钥和消费者密钥组合为以下格式:consumer-key:consumer-secret。使用base64对组合字符串进行编码。大多数编程语言都有一个base64编码字符串的方法。有关编码为base64的示例。访问base64encode站点以获取更多信息。 执行对令牌API的POST调用以获取访问令牌。
我们的数据是正确的但是我们从服务器收到415错误。
非常感谢协助。
答案 0 :(得分:0)
A 415错误在http://www.checkupdown.com/status/E415.html中描述为“不支持的媒体类型”
正如@krock所提到的,内容类型未指定为application/x-www-form-urlencoded
,而是将其设置为x-www-form-
+您的身份验证码。
答案 1 :(得分:0)
您正在设置错误的Content-Type
标头:
'Content-Type': 'application/x-www-form-' + authorizationcode
那应该是'application/x-www-form-urlencode'
。但是,您不必将设置为,因为requests
如果您将字典传入data
参数,则会自动为您执行此操作。
requests
也会为您处理Authorization
标题;将用户名和密码作为元组传递给auth
参数:
auth = ('username', 'password')
params = {'grant_type': 'client_credentials', 'scope': 'PRODUCTION'}
r = requests.post('https://api-km.it.umich.edu/token', data=params, auth=auth)
其中user
和password
是冒号前后的部分。 requests
将从这两个字符串为您生成正确的 Basic base64编码标头。