#python #api #authentication #curl
#python #API #аутентификация #curl
Вопрос:
Я пытаюсь использовать Rest Api, который имеет аутентификацию OAuth2, используя сгенерированный apikey в консоли администратора портала для получения токена доступа, который затем будет использоваться для всех запросов. В документации они предоставляют пример запроса для получения токена доступа с помощью curl, который выглядит следующим образом:
curl --request POST
--url https://exampleurl.com/oauth2/token
-u apitoken:abcsdsadssfsagasagasgasgasgasg
--data grant_type=client_credentials
Использование этого скрипта работает, и я получаю токен доступа в качестве ответа.
Сейчас я работаю на python и пока не могу получить там те же результаты. Код, который я писал, выглядит следующим образом:
import requests
headers={'apitoken': 'abcsdsadssfsagasagasgasgasgasg'}
data={'grant_type': 'client_credentials'}
try:
r = requests.post('https://exampleurl.com/oauth2/token', headers=headers, data=data)
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)
Запуск этого скрипта выдает мне ошибку HTTP 401 «Несанкционированный доступ к URL».
Любая помощь приветствуется.
Ответ №1:
Используя -u
опцию curl
команды, вы устанавливаете заголовок 'Authorization: Basic your_credentials'
, где your_credentials
part — это версия строки в кодировке base64 apitoken:abcsdsadssfsagasagasgasgasgasg
. Итак, в Python вы можете либо установить заголовок авторизации как:
import base64
your_credentials = "{}:{}".format('apitoken', 'abcsdsadssfsagasagasgasgasgasg')
your_credentials_base64 = base64.b64encode(your_credentials.encode())
headers={'Authorization': 'Basic {}'.format(your_credentials_base64)}
data={'grant_type': 'client_credentials'}
try:
r = requests.post('https://exampleurl.com/oauth2/token', headers=headers, data=data)
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)
или вы можете использовать requests.auth
import requests
from requests.auth import HTTPBasicAuth
data={'grant_type': 'client_credentials'}
try:
r = requests.post('https://exampleurl.com/oauth2/token', data=data, auth=HTTPBasicAuth('apitoken', 'abcsdsadssfsagasagasgasgasgasg'))
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)