Как с помощью python requests грамотно отправить post запрос с типом 'application/x-www-form-urlencoded'
С помощью Wireshark поймал post запрос, сразу обратил внимание, что какой-то он странный:
(ловил у десктопного приложения)
POST /api/log/post?sessionId=%7BF0А3A03B-6D8F-4E3A-8DF1-DDC114098F%7D&created=2021-08-05T09:09:37&category=%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BE%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5¬e=%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA%20%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F.%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF:%20%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD&fileType= HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Host: log.test.ast.test.ru
Accept: text/html
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Нагуглил что такое "application/x-www-form-urlencoded" и даже что то типо примеров, но что т фигя какая то получилась.
url = 'http://log.test.ast.test.ru/api2/log/post'
#мне даже не оч понятно откуда брать урл
data = {
'sessionId': '{F0D409FE8F}',
'created': '2021-08-05T09:09:38',
'category': 'Информация о системе',
'note': 'Получение информации о системе',
'fileType': 'HTTP/1.0'
}
header = {
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': '0',
'Host': 'log.test.ast.test.ru',
'Accept': 'text/html',
'User-Agent': 'Mozilla/3.0 (compatible; Indy Library)'
}
r = requests.post(url=url, headers=header, data=data)
Кидаю это, ловлю свой пакет wareshark'ом, а там в всё в одну строку без заголовка, в общем не похоже на тот пакет что выше. Как правильно его отправить, что бы он был похож на исходный?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Параметр data= нужен для отправки тела запроса, а в вашем примере тела нет (видно по заголовку запроса Content-Length: 0)
А то, что передается в параметрах запроса (?sessionId=%7BF0А3A03B-6D8F-4...) выполняется через params=
Поменяйте так:
r = requests.post(url=url, headers=header, params=data)