Ошибка 403 (запрещено) при использовании API Fortnite Tracker с urllib.request

1

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

У меня есть ключ 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 Это не 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 минут назад) есть ли способ проверить? Будет ли возвращена эта ошибка?

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

  • 0
    Вы смотрели на использование чванства раньше?
Теги:
header
request
urllib

1 ответ

0

Попробуйте использовать запросы, 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 (или Inspect с Cntrl + Shift + I, а затем перейдите в Network). Нажмите " https://api.fortnitetracker.com/v1/profile/pc/xantium0 " и измените заголовки. На Firefox есть кнопка Modify и resend. Проверьте ответ и, в конце концов, попробуйте изменить имя ключа api заголовка.

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

  • 0
    Хорошо, я изменил ваш код, чтобы удалить ошибку: response = requests.get(url, headers=headers) . Когда он запускается, я получаю, что Requests was successful: False {"message":"Invalid authentication credentials"} . Похоже, ключ неправильный, но он точно совпадает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню