Я пытаюсь создать сценарий HTTP POST-запроса с python.
При попытке с помощью curl из bash все работает.В python, используя библиотеку requests
или urllib3
, я получаю сообщение об ошибке от API.Запрос POST содержит информацию в заголовках и в виде json в теле запроса.
Что я заметил, когда я перехватываю пакеты с помощью Wireshark, запрос curl (который работает) представляет собой один отдельный пакет длиной 374 байта,Python-запрос (без разницы между requests
и urllib3
здесь) разбивается на 2 отдельных пакета длиной 253 и 144 байта.
Wireshark собирает их без проблем, и они оба, кажется, содержат полную информацию в заголовке и теле POST.Но API, к которому я пытаюсь подключиться, отвечает не очень полезной «Ошибка при обработке запроса».
Поскольку 253 байта не могут быть пределом TCP-пакета, в чем причинаповедение?Есть ли способ исправить это?
РЕДАКТИРОВАТЬ:
bash:
curl 'http://localhost/test.php' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' -H 'Content-Type: application/json' -d '{"key1":"value1","key2":"value2","key3":"value3"}'
python:
import requests, json
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
"Content-Type": "application/json"}
data = {"key1":"value1", "key2":"value2", "key3":"value3"}
r=requests.post("http://localhost/test.php", headers=headers, data=json.dumps(data))