【问题标题】:403 (Forbidden) error when using Fortnite Tracker api with urllib.request将 Fortnite Tracker api 与 urllib.request 一起使用时出现 403(禁止)错误
【发布时间】: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
  • 我的代码不正确,我实际上并没有将标头传递给服务器
  • 我被封号了

我的问题是我认为我的代码正确的:

来自documentation

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


【解决方案1】:

尝试使用requests,这是一个pythonic、快速且广泛使用的模块。

import requests


url = 'https://api.fortnitetracker.com/v1/profile/pc/xantium0'
headers = {
    'TRN-Api-Key' : 'xxx'
}

response = requests(url, headers=headers)

print('Requests was successful:', response.ok)
print(response.text)

如果它不起作用,您可以使用浏览器访问该 url,然后检查请求: 在 Firefox 中按 Cntrl+Shift+E,在 Chrome 中按 Cntrl+E(或使用 Cntrl+Shift+I 检查,然后转到网络)。按“https://api.fortnitetracker.com/v1/profile/pc/xantium0”并更改标题。在 Firefox 上有按钮修改和重新发送。检查响应并最终尝试更改标头 api 密钥名称。

希望这有帮助,请告诉我。

【讨论】:

  • 好的,我更改了您的代码以消除错误:response = requests.get(url, headers=headers)。当它运行时,我得到这个Requests was successful: False {"message":"Invalid authentication credentials"}。这看起来像密钥错误,但它完全匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2017-05-04
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多