Чтобы отфильтровать вывод, что я могу отправить JSON в API, как:Отправка полезной нагрузки для запроса GET в Python
curl -X GET https://api.mysite.com/user \
-H "Authorization: XXXXX" \
-H "Content-Type: application/json"
-d '{
"q": {
"name": {
"eq": "0aslam0"
}
}
}'
Вышеприведенные работает просто отлично. Я пытаюсь отправить тот же с помощью питона кода с помощью requests
library.I попытался следующий код:
r = requests.get(url, headers=my_headers, params=payload)
где
url = "https://api.mysite.com/user"
my_headers = {
'Authorization': 'XXXXX',
'Content-Type': 'application/json',
'Accept': 'application/json',
}
data = {
"q": {
"name": {
"eq": "0aslam0"
}
}
}
payload = json.dumps(data)
но r.text
содержит вывод нормального GET без применения фильтра. Я зарегистрировал запрос и увидел, что получаю перенаправление 301
. Я не понимаю свою ошибку.
EDIT 1
Я изменил код:
r = requests.get(url, headers=my_headers, json=payload)
@Martijn был прав. Использование params
было неправильным. Но вышеизложенное также не получилось. Я также добавил заголовок 'User-Agent': 'curl/7.40.0'
, чтобы узнать, может ли это сработать. Не повезло и там.
EDIT 2
Документация по API говорит, фильтрация может быть сделано другим способом. Изменение адреса на:
GET /user?q%5Bname%5D%5Beq%5D=0aslam0 HTTP/1.1
Это HTML-код. Поэтому я попытался отформатировать мой URL-адрес в таком формате и не отправлять почтовую информацию, например:
r = requests.get(url, headers=my_headers)
И это работает! Поэтому, по крайней мере, сейчас у меня есть решение моей проблемы. Но вопрос о том, как отправить полезную нагрузку (метод, описанный выше) для запроса GET, по-прежнему остается.
Как сформирован заголовок авторизации? Существует ли какая-либо подпись, основанная на теле запроса? –
Заголовок авторизации - это токен, созданный для любого разработчика API. Нет ничего такого, как подпись, зависящая от тела запроса. – 0aslam0
Тогда у меня много идей; ниже приведен запрос, близкий к тому, что делает ваша команда 'curl' (что довольно странно * в том, что оно использует GET, а не' POST'). –