【问题标题】:Converting curl to python for accessing an api将 curl 转换为 python 以访问 api
【发布时间】: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 标头

标签: python api curl


【解决方案1】:

http://www.checkupdown.com/status/E415.html 中将 415 错误描述为“不支持的媒体类型”

正如@krock 提到的,内容类型未指定为application/x-www-form-urlencoded,而是设置为x-www-form- + 您的身份验证代码。

【讨论】:

    【解决方案2】:

    您设置的Content-Type 标头不正确:

    'Content-Type': 'application/x-www-form-' + authorizationcode
    

    应该是'application/x-www-form-urlencode'。但是,您不必完全设置它,因为如果您将字典传递给data 参数,requests 会自动为您执行此操作。

    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)
    

    其中userpassword 是冒号前后的部分。 requests 将从这两个字符串中为您生成正确的 Basic base64 编码标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2017-12-03
      • 2011-03-31
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多