Я преобразовал скрипт 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
Преобразование Bash в скрипт Python, ошибка аутентификации при обращении к API? - это тот же сценарий? ⇐ Python
Программы на Python
1732580265
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/77345301/conversion-of-bash-to-python-script-authentication-error-when-hitting-the-api[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия