Ошибка 403 (запрещено) при использовании API-интерфейса Fortnite Tracker с urllib.request - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить статистику пользователя от API трекера Fortnite.

У меня есть ключ API, и я использую правильный URL-адрес как , указанный в документации

Шаблон URL:

https://api.fortnitetracker.com/v1/profile/{platform}/{epic-nickname}

Желаемый URL:

https://api.fortnitetracker.com/v1/profile/pc/xantium0

Если я использую эту ссылку в браузере, я получаю {"message":"No API key found in request"} (так как я не передал ключ API), поэтому ссылка должна быть правильной. Также, если я не передам ключ API с помощью urllib, я получу ошибку 403.

Я проверил, как передать заголовок в запросе: Как установить заголовки, используя urllib python?

и до сих пор этот код:

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

Ответ тот же, если я не передам ключ API в заголовке.

Я могу думать только о трех причинах, по которым этот код не работает:

  • Я передал неправильное имя заголовка (т.е. это не TRN-Api-Key)
  • Мой код неверен, и я не передаю заголовок серверу
  • Меня забанили

Моя проблема в том, что я думаю, что мой код правильный:

Из документации :

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

Я прошел url и прошел headers (без путаницы с аргументом data). В документации API также упоминается, что она должна быть передана в заголовках.

Я также вполне уверен, что мне нужно использовать TRN-Api-Key, как показано в документации API:

TRN-Api-Key: xxx

Также в этот вопрос (с использованием Ruby):

header = {
    key: "TRN-Api-Key: Somelong-api-key-here"
}

Или меня забанили (это возможно, хотя я получил ключ 15 минут назад) есть ли способ проверить? Эта ошибка будет возвращена?

Что мешает мне получить статистику пользователя?

1 Ответ

0 голосов
/ 04 сентября 2018

Попробуйте использовать запросы , питонский, быстрый и широко используемый модуль.

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 заголовка.

Надеюсь, это поможет, дайте мне знать.

...