将curl转换为python以访问api

将curl转换为python以访问api,python,api,curl,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 此外,以下是说明:

我在将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
此外,以下是说明:

从API目录中获取使用者密钥和使用者机密。这些是在应用程序成功订阅API后在“订阅”页面上生成的。 按以下格式组合使用者密钥和使用者密钥:使用者密钥:使用者密钥。使用base64对组合字符串进行编码。大多数编程语言都有一种对字符串进行base64编码的方法。有关编码到base64的示例。有关更多信息,请访问base64encode网站。 执行对令牌API的POST调用以获取访问令牌

我们的数据是正确的,但是我们从服务器上得到一个415错误


非常感谢您的帮助。

中描述的415错误为“不支持的媒体类型”


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

您设置的
内容类型
标题不正确:

'Content-Type': 'application/x-www-form-' + authorizationcode
这应该是
'application/x-www-form-urlencode'
。但是,您根本不必设置它,因为如果您将字典传递给
数据
参数,则
请求
会自动为您执行此操作

请求
还将为您处理
授权
标题;将用户名和密码作为元组传递给
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
是冒号前后的部分<代码>请求将从这两个字符串中为您生成正确的基本base64编码头。

'-d'是请求正文中要发送的“数据”,您似乎已在post方法调用中正确应用了它。问题是什么?我们从服务器收到415个错误。您已将您的
authorizationcode
添加到内容类型标题的末尾。它应该是
application/x-www-form-urlencoded
,就像curl请求一样。@krock如果我去掉了,授权代码应该遵循basic还是根本不应该在我的头中?Content-Type头描述了请求主体中的格式
application/x-www-form-urlencoded
是一个标准的表单帖子。身份验证数据不进入
内容类型
标题
auth = ('username', 'password')
params = {'grant_type': 'client_credentials', 'scope': 'PRODUCTION'}

r = requests.post('https://api-km.it.umich.edu/token', data=params, auth=auth)