【发布时间】:2018-09-03 22:01:02
【问题描述】:
我正在尝试从 Fortnite tracker api 获取用户统计信息。
我有一个 api 密钥,并且正在使用正确的 url 作为indicated in the documentation
模板网址:
https://api.fortnitetracker.com/v1/profile/{platform}/{epic-nickname}
所需网址:
https://api.fortnitetracker.com/v1/profile/pc/xantium0
如果我在浏览器中使用这个链接,我会得到{"message":"No API key found in request"}(因为我没有传递 API 密钥)所以链接应该是正确的。另外,如果我不使用 urllib 传递 api 密钥,那么我仍然会收到 403 错误。
我查看了如何在请求中传递标头:How do I set headers using python's urllib?
到目前为止有这个代码:
import urllib.request as ur
request = ur.Request('https://api.fortnitetracker.com/v1/profile/pc/xantium0', headers={'TRN-Api-Key' : 'xxx'})
response = ur.urlopen(request)
print(response.read())
运行时出现此错误:
urllib.error.HTTPError: HTTP Error 403: Forbidden
403 签出为:
HTTP 403 是 HTTP 服务器与客户端通信的标准 HTTP 状态代码,表示服务器理解请求,但不会满足它。有许多子状态错误代码为响应 403 状态代码提供了更具体的原因。
https://en.wikipedia.org/wiki/HTTP_403
如果我不在header中传递api键,响应是一样的。
我只能想到这段代码不起作用的三个原因:
- 我传递了错误的标题名称(即不是
TRN-Api-Key) - 我的代码不正确,我实际上并没有将标头传递给服务器
- 我被封号了
我的问题是我认为我的代码是正确的:
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
我已经通过了url 并且我已经通过了headers(不会与data 争论混淆)。 api 文档还提到它应该在 headers 中传递。
我也很确定我需要使用TRN-Api-Key,如 api 文档中所示:
TRN-Api-Key: xxx
也在this question 中(使用 Ruby):
header = {
key: "TRN-Api-Key: Somelong-api-key-here"
}
或者我被禁止了(虽然我在 15 分钟前拿到了钥匙,但这是可能的)有没有办法检查?会返回这个错误吗?
是什么阻止我获取用户统计信息?
【问题讨论】:
-
你以前用swagger看过吗?
-
嘿@Simon,我在连接到 API 时也遇到了问题,但是即使没有标头,我也会收到 401 错误,所以可能被禁止了?您怎么知道将“TRN-Api-Key”作为标题名称传递?一旦我这样做了,我现在就收到了 200。我正在尝试 API_KEY 之类的名称和其他东西。在网站上的任何地方都找不到它
-
@mitchell 不幸的是没有。我放弃了
标签: python api header request urllib