将curl转换为python以访问api

时间:2015-04-21 01:11:50

标签: python api curl

我无法将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错误。

非常感谢协助。

2 个答案:

答案 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)

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