【发布时间】:2019-09-03 16:51:45
【问题描述】:
我想以编程方式获取 http://www.cardmarket.com/ 上特定用户的库存,但似乎无法让 OAuth 身份验证在以下 Python sn-p 中工作。
仅使用 requests_oauthlib 库中的可用方法并没有给出任何积极的结果,我还尝试自己构建 OAuth 标头并在请求调用中传递它,但都无济于事。我有点不知所措,因为我已经尝试了几个小时没有结果,以至于我对本应是一个简单的爱好项目失去了最大的乐趣。尽管如此,我相信这是一个可以很快解决的简单问题。
以下是应该有效但无效的简单代码:
import requests
from requests_oauthlib import OAuth1
user = ..
app_token = ..
app_secret = ..
access_token = ..
access_token_secret = ..
request_url = "https://api.cardmarket.com/ws/v2.0/users/" + user + "/articles?start=0&maxResults=100"
auth = OAuth1(app_token, app_secret, resource_owner_key=access_token, resource_owner_secret=access_token_secret)
response = requests.get(request_url, auth=auth)
print(response.request.headers)
print(response)
print(response.content)
我也尝试了多种变体,如前所述,我也尝试自己构建标题,但没有结果。
我没有看到提供的代码原样有任何问题,但在执行给定查询时仍然收到错误消息。
response.request.headers 打印语句返回以下内容:
{'Authorization': b'OAuth oauth_nonce="..", oauth_timestamp="..", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="..", oauth_token="..", oauth_signature=".."', 'Accept-Encoding': b'gzip, deflate', 'User-Agent': b'python-requests/2.18.4', 'Accept': b'*/*', 'Connection': b'keep-alive'}
这似乎包含了所有相关数据(虽然可能太多了?诸如 Accept-Encoding、User-Agent 和 Connection 之类的东西是自动添加的,但可能不是预期的,但我不确定。)
【问题讨论】:
-
“为什么上面给出的简单代码不起作用。”:与给定的
cardmarket文档相比,您使用的参数要少得多。相关 [使用 libcurl 库的 PHP 工作示例](mkmapi.eu/ws/documentation/API:Auth_libcurl) -
OAuth 对象在由 requests.get 调用时生成其余参数。 nonce、timestamp、version、signature_method 和 signature 都是由它生成的。编辑:我在原始帖子中包含了 OAuth 调用生成的标头。
-
与你的
response.request.headers比较发现缺少realm="https://api.cardmarket.com/ws/v1.1/account" -
添加它并对标题中的键进行排序没有帮助。
标签: python api oauth python-requests