2

背景

我已经使用 pypiwin32 成功地发出了一些 HTTP GET请求

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.statusand获取响应状态和文本h.responseText

问题

pywin32(或者我应该说pypiwin32)似乎没有官方文档,Microsoft WinHttpRequest 对象文档只有 C++ 示例。

问题

如何使用来自 pywin32 的 win32com.client 使用特定的有效负载和标头发出 HTTP POST 请求?假设我要添加的 HTTP 请求标头是

Referer: http://example.com/analysis.aspx?ID=527776455
Cookie: ASP.NET_SessionId=51jrf2r

我要发布的有效负载是

{"Id":"8974552","Action":"Analysis"}
4

2 回答 2

1
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"}")
于 2018-02-02T10:03:15.303 回答
0

经过一些尝试和错误,我认为我做对了。这是一个使用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)

这是打印命令的输出,已删除 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"
}
于 2018-02-05T12:40:31.457 回答