【发布时间】:2015-04-21 01:11:49
【问题描述】:
我在将 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 后在订阅页面上生成的。 按照以下格式组合消费者密钥和消费者秘密密钥:消费者密钥:消费者秘密。使用 base64 对组合字符串进行编码。大多数编程语言都有对字符串进行 base64 编码的方法。例如,编码为 base64。访问 base64encode 网站了解更多信息。 对令牌 API 执行 POST 调用以获取访问令牌。
我们的数据是正确的,但是我们从服务器收到 415 错误。
我们将不胜感激。
【问题讨论】:
-
'-d' 是要在请求正文中发送的“数据”,您似乎已在 post 方法调用中正确应用了它。有什么问题?
-
我们收到来自服务器的 415 错误
-
您已将
authorizationcode添加到 Content-Type 标头的末尾。它应该只是application/x-www-form-urlencoded就像 curl 请求一样。 -
@krock 如果我摆脱了授权代码应该遵循基本的还是根本不应该在我的标题中?
-
Content-Type 标头描述了请求正文中的格式。
application/x-www-form-urlencoded是标准形式的帖子。身份验证数据不会进入Content-Type标头