ошибка curl to python: «ключ API не указан» - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь выполнить команду curl с запросами Python.Насколько я могу судить, я все делаю правильно, но веб-сайт не распознает ключ API независимо от того, как я пытаюсь его включить.По сути, сайт, на который я пытаюсь попасть, хочет, чтобы в начале URL был указан ключ API.Когда я делаю это с curl, он работает отлично.Однако, когда я пытаюсь сделать это через запросы Python, это не работает.Также не работает его отправка в виде пары ключ-значение в словаре.

Это работает

curl -H "Content-Type:application/json" -d '{"ndbno":["11124"],"type":"f"}' [API KEY]@api.nal.usda.gov/ndb/V2/reports

и вот код запроса:

import requests

headers = {'Content-Type': 'application/json',}

data = '{"ndbno":["11124"],"type":"f"}'

response = requests.post('http://[API KEY]@api.nal.usda.gov/ndb/V2/reports', headers=headers, data=data)

Результатом этого является ответ json, содержащий сообщение: "{'error': {'code': 'API_KEY_MISSING', 'message': 'Не указан api_key. Получите один в http://api.nal.usda.gov:80'}}"

Это также не работает, если я удаляю [API KEY] из URL и добавляю его в словарь данных как «api_key»: «[API KEY]»

Кстати, я непередавая ключ в виде списка или чего-то еще, я просто не хотел публиковать физический ключ в своем вопросе.

Я новичок в python и stackoverflow, но я сделал все возможное,и уже несколько часов ищем ответы и тестируем разные способы форматирования запроса.Любая помощь с благодарностью!

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вероятно, потому, что запросы не анализируют API-ключ KEY из URL-адреса, попробуйте следующее:

response = requests.post('http://api.nal.usda.gov/ndb/V2/reports', headers=headers, data=data, auth=(API_KEY, ''))

Он передает его с использованием обычной аутентификации (заголовок Authorization), который аналогичен поведению curl, когдапарсинг URL.

Обычно при базовой аутентификации у вас есть имя пользователя и пароль.Например: auth=('<username>', '<password>')

Поскольку этот API, похоже, заботится только об имени пользователя, я оставил пароль пустым.

0 голосов
/ 27 декабря 2018

Глядя на API PubAG, кажется, что вы можете просто передать api_key в строке запроса URL.Я бы предположил, что это то же самое для используемого вами API, но беглый поиск не дал никакой документации.

Попробуйте: https://api.nal.usda.gov/ndb/V2/reports?api_key=[API_KEY]

response = requests.post('https://api.nal.usda.gov/ndb/V2/reports?api_key=[API_KEY]', headers=headers, data=data)

У меня нет APIключ, чтобы попробовать это, но переход к https://api.nal.usda.gov/ndb/V2/reports?api_key=asdfds в моем браузере выдает мне недопустимую ошибку ключа API, которая предполагает, что конечная точка распознает, что я дал ключ API.

...