Преобразование Bash в скрипт Python, ошибка аутентификации при обращении к API? - это тот же сценарий?Python

Программы на Python
Ответить
Anonymous
 Преобразование Bash в скрипт Python, ошибка аутентификации при обращении к API? - это тот же сценарий?

Сообщение Anonymous »

Я преобразовал скрипт Bash в Python, вызов API работает для bash, но не для Python, и я понятия не имею, почему.
Вот bash:
AUTH_HOST=xxxx
AUTH_URL="https://${AUTH_HOST}/as/token.oauth2"

USERID='api_someuser'
PASSWORD='something'
ESCAPED_PASSWORD='something_escaped'
API_HOST="refdata.api.cmegroup.com"
PRODUCTS="https://${API_HOST}/refdata/v3/products"
INSTRUMENTS="https://${API_HOST}/refdata/v3/instruments"

resp=$(curl --silent "${AUTH_URL}" --request POST \
-H "Host: ${AUTH_HOST}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=${USERID}&client_secret=${ESCAPED_PASSWORD}")

TOKEN=$(echo "$resp" | jq --raw-output '.access_token')

page=$(curl --silent "${PRODUCTS}" --request GET \
-H "Host: ${API_HOST}" \
-H "Authorization: Bearer ${TOKEN}")

Когда я запускаю вышеописанное, все работает.
Тогда вот эквивалент Python:
import json
import requests

AUTH_HOST=xxxx
AUTH_URL=f"https://{AUTH_HOST}/as/token.oauth2"

USERID='api_someuser'
PASSWORD='something'
ESCAPED_PASSWORD='something_escaped'
API_HOST="refdata.api.cmegroup.com"
PRODUCTS=f"https://{API_HOST}/refdata/v3/products"
INSTRUMENTS=f"https://{API_HOST}/refdata/v3/instruments"

headers = {"Host": AUTH_HOST, "Content-Type": "application/x-www-form-urlencoded",}

data = {
"grant_type":"client_credentials",
"client_id": USERID,
"client_secret":PASSWORD
}

### send post request
resp = requests.post(AUTH_URL, data=data, headers=headers)
token = resp.json()['access_token']

header_for_page = {"Host": API_HOST, "Authorization": f"Bearer {token}"}

page = requests.get(PRODUCTS, headers = header_for_page)
breakpoint()

Когда я печатаю(страницу), я получаю:


Судя по тому, что я смог найти, это ошибка аутентификации, но когда я запускаю конкретный сценарий bash, он, кажется, проходит аутентификацию, и я могу получить данные.
Что-то не так с преобразованием Bash в Python?

Вот предыдущий скрипт Python, который работал (он имеет те же учетные данные, что и выше- поэтому я так озадачен)
N.B. API_HOST и PRODUCT — единственная разница, поэтому я пишу новый скрипт.
:
import json
import requests

USERID='api_someuser'
PASSWORD='something'
ESCAPED_PASSWORD='something_escaped'

AUTH_HOST="auth.cmegroup.com"
AUTH_URL="https://auth.cmegroup.com/as/token.oauth2"

headers = {"Host": AUTH_HOST, "Content-Type": "application/x-www-form-urlencoded",}

data = {
"grant_type":"client_credentials",
"client_id": USERID,
"client_secret":PASSWORD
}

### send post request
resp = requests.post(AUTH_URL, data=data, headers=headers)

token = resp.json()['access_token']

API_HOST="api.refdata.cmegroup.com"
PRODUCTS=f"https://{API_HOST}/v2/products"

header_for_page = {"Host": API_HOST, "Authorization": f"Bearer {token}"}

page = requests.get(PRODUCTS, headers = header_for_page)
breakpoint()


Подробнее здесь: https://stackoverflow.com/questions/773 ... ng-the-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»