Как сделать 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"
}
Другие вопросы по тегам