Как сделать HTTP-запрос POST с pywin32 / pypiwin32?
Фон
Я успешно сделал несколько запросов HTTP GET с pypiwin32, используя
import pythoncom
import win32com.client
pythoncom.CoInitialize()
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.SetAutoLogonPolicy(0) # log in automatically
h.Open('GET', url, True)
h.Send()
и позже получить статус ответа и текст от h.status
а также h.responseText
проблема
pywin32 (или, я бы сказал, pypiwin32), похоже, не имеет официальных документов, а документация по объектам Microsoft WinHttpRequest имеет только примеры C++.
Вопрос
Как сделать HTTP-запрос POST с определенной полезной нагрузкой и заголовками, используя win32com.client из pywin32? Допустим, что заголовки HTTP-запросов, которые я хочу добавить,
Referer: http://example.com/analysis.aspx?ID=527776455
Cookie: ASP.NET_SessionId=51jrf2r
и полезная нагрузка, которую я хочу разместить
{"Id":"8974552","Action":"Analysis"}
2 ответа
import pythoncom
import win32com.client
pythoncom.CoInitialize()
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.SetAutoLogonPolicy(0) # log in automatically
h.Open('POST', url, True)
h.SetRequestHeaders(Your_Headers)
h.Send("{"Id":"8974552","Action":"Analysis"}")
После некоторых проб и ошибок, я думаю, я понял это правильно. Вот пример использования httpbin. Я обнаружил, что использование json.dumps() довольно удобно, поскольку он автоматически записывает False как "false", а None как "null".
import json
import win32com.client
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.Open('POST', 'http://httpbin.org/post', True)
h.SetRequestHeader('Referer', 'http://example.com/analysis.aspx?ID=527776455')
h.SetRequestHeader('Cookie', 'ASP.NET_SessionId=51jrf2r')
payload = dict(
Id = 8974552,
Action = "Analysis",
somebool = False,
missing_parameter = None
)
h.Send(json.dumps(payload))
print(h.responseText)
Вот вывод команды print с удаленным IP-адресом:
{
"args": {},
"data": "{\"Id\": 8974552, \"Action\": \"Analysis\", \"somebool\": false, \"missing_parameter\": null}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Content-Length": "83",
"Content-Type": "text/plain; Charset=UTF-8",
"Cookie": "ASP.NET_SessionId=51jrf2r",
"Host": "httpbin.org",
"Referer": "http://example.com/analysis.aspx?ID=527776455",
"User-Agent": "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
},
"json": {
"Action": "Analysis",
"Id": 8974552,
"missing_parameter": null,
"somebool": false
},
"origin": "###.###.###.###",
"url": "http://httpbin.org/post"
}