Rest API的OAuth1身份验证

时间:2018-03-09 11:36:41

标签: python rest api request

我需要根据下面给出的方案做一个帖子请求。我只有consumer_key和consumer_secret。我不知道从哪里得到所有其他领域。我还需要发送授权请求,包括标题中的键吗?

必须使用上述响应中的使用者密钥获取应用程序的请求令牌。

请求

POST /public/v1/oauth1/request_token
  Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
  Authorization: OAuth
    oauth_consumer_key="btgd2cg2bm3lbjqsfv150fj9q8",
    oauth_signature_method="HMAC-SHA1",
    oauth_timestamp="1467792887",
    oauth_nonce="9fd50a6f-40e0-41be-8809-34aa832b688e",
    oauth_callback="oob",
    oauth_signature="hcE6Q3boTytkHmM72xegCP1Y3W4%3D"

我正在做这样的事情

import requests
url="https://api.discovergy.com"
request_token_url=url+'/public/oauth1/request_token'
head={'Accept':'text/html, image/gif, image/jpeg, *;q=.2, '/';q=.2',
'Authorization':'OAuth'}
data= dict(oauth_consumer_key=client_key, oauth_signature_method='HMAC-SHA1', oauth_timestamp='1467792887', oauth_nonce='9fd50a6f-40e0-41be-8809-34aa832b688e', oauth_callback='oob', oauth_signature='hcE6Q3boTytkHmM72xegCP1Y3W4%3D')

r=request.post(url=request_token_url, data=data, headers=head)
print(r.content)

它提供400状态..

2 个答案:

答案 0 :(得分:0)

Oauth1在python for Requests中有一个不同的授权构建模块。有关使用的示例,请参阅documentationhelp files

您获得的400 RC是因为您尝试POST到该端点并且不支持该方法。很可能你只能从那里获得。

答案 1 :(得分:0)

Discovergy API文档位于https://api.discovergy.com/docs/。我在https://github.com/andig/discovergy设置了一个小型PHP Discovergy API客户端。它演示了整个过程。对于/request_token POST(它是POST),请确保使用从/consumer_token获取的使用者密钥,而不是使用Discovergy提供的凭据。

更新我还注意到,根据您的示例,您似乎将参数作为POST正文传递。这些必须位于标题中,就像您显示的第一个代码块一样。

更新2 同时确保接受正确的内容类型,至少application/json,可能加text/plain