#python #csv #curl #python-requests
#python #csv #curl #python-запросы
Вопрос:
У меня есть curl
запрос POST, который отлично работает в терминале (macOS), возвращая csv, как и ожидалось. Следующий формат указан в документации RJMetrcis (см. «Экспорт данных рисунка»). Вот запрос curl в bash:
curl -d "format=csvamp;includeColumnHeaders=1" -H "X-RJM-API-Key: myAPIkey" https://api.rjmetrics.com/0.1/figure/0000/export
Моя цель — реализовать точно такой же запрос curl в Python с использованием requests
. Когда я ввожу те же параметры, что и POST-запрос, код не работает, возвращая ошибку:
import requests
headers = {'X-RJM-API-Key: myAPIkey'}
data= {'format=csvamp;includeColumnHeaders=1'}
url = "https://api.rjmetrics.com/0.1/figure/0000/export"
response = requests.post(url, data, headers)
Это возвращает ошибку:
TypeError: memoryview: a bytes-like object is required, not 'str'
Со второй попытки:
response = requests.post(url, data=data, headers=headers)
ВОЗВРАТ
AttributeError: 'set' object has no attribute 'items'
Каков правильный формат в python для построения POST-запроса, чтобы он соответствовал data = {'key':'value'}
соглашению и возвращал csv?Любая помощь будет оценена по переводу сообщения bash curl в запрос python POST
Ответ №1:
Здесь вы передаете set, и ожидается, что вы передадите объект dict или str
data= {'format=csvamp;includeColumnHeaders=1'}
Замена на
data= {'format':'csvamp;includeColumnHeaders=1'}
Это должно быть исправлено.
С другой стороны, увидев ваш запрос curl..
Все зависит от того, как вы хотите передать данные, следующий код (передача полезной нагрузки данных в виде строки) будет отправлять данные напрямую, что будет эквивалентно —data-raw в curl
import requests
url = "https://api.rjmetrics.com/0.1/figure/0000/export"
payload = "'{"format":"csvamp;includeColumnHeaders=1"}'"
headers = {
'X-RJM-API-Key': 'myAPIkey'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
Комментарии:
1. Спасибо, это что-то возвращает, хотя, похоже, возвращает строку json
2. «выводит данные, используемые для создания фигуры с указанным идентификатором» из devdocs.magento.com/mbi/docs/export-api.html#export-figure-data это и есть строка json, которую вы получаете? я думаю, что для получения csv у api должен быть запрос GET для этого
3. Да, это возвращаемый JSON