Сбой запроса API из-за переполнения стека 401

#python #urllib

#python #urllib

Вопрос:

Я пытаюсь научиться использовать API, что, как я полагал, я бы сделал, используя его для улучшения моего опыта при игре. Что я хочу сделать, так это начать с получения моей статистики из API, для которого я использую следующий код:

 import ssl
from urllib.request import Request, urlopen

ssl._create_default_https_context = ssl._create_unverified_context

key = input("what is your API key?")
req = Request('https://public-api.tracker.gg/apex/v1/standard/profile/1/daanenjasper')
#line below added to avoid error 403
req.add_header('User-agent', 'text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8')
req.add_header('apikey', key)
content = urlopen(req).read()

print(content)
  

Это приведет к следующему выводу, из которого я действительно смог расшифровать только http error 401 , что не очень помогает.

 Traceback (most recent call last):
  File "/Users/daankoning/Documents/projects/apex/main.py", line 11, in <module>
    content = urlopen(req).read()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: Unauthorized
  

Так что я не совсем уверен, что здесь происходит не так, любая помощь была бы высоко оценена!

Комментарии:

1. Я бы посоветовал вам попробовать использовать пакет requests… это намного проще в использовании, чем любая из версий urllib.

2. Многое здесь зависит от формата, в котором вызываемый вами API ожидает ключ API, он может просто ожидать, что ключ API будет закодирован в Base64, или ваш заголовок может быть неправильным; попробуйте что-то вроде 'Authorization': 'Bearer {}'.format(apikey) или 'Authorization': 'Basic {}'.format(apikey) . Я согласен с Крисом, хотя, если вы просто пытаетесь изучить основы, используйте requests модуль, если это вообще возможно, это отраслевой стандарт (вы почти никогда не видите urllib, если по какой-либо причине не можете использовать внешние библиотеки), И о нем легче рассуждать, он более удобен для пользователя и т.д.