更新日志:
2021.08.18
修复响应头的 Set-Cookie 总是被改变为 Cookie 的问题。
版本号3.6
2021.08.16
修复请求头行首包含空白符会被错误解析的问题。
增加 Cookie 的快速获取。
版本号3.5
2021.04.11
集成 CreateFormData 函数。
集成 BinArr 系列函数。
版本号为3.2
2021.04.05
修正部分 URL ( http://snap.ie.sogou.com ),请求头重复添加 Connection: Keep-Alive 的问题。
添加默认 User-Agent 。
gzip 解压目前只找到了32位的 dll ,所以还是用老方法解决 gzip 压缩数据的问题。
版本号为3.1
2021.04.04
代码重构。
版本号为3.0
2020.08.18
请求头可直接使用响应头中的“Set-Cookie”值,会自动处理为“Cookie”。
小幅修改说明。
版本号为2.0
2020.08.16
如果 “Accept-Encoding” 中含有关键词“gzip”,则选项将被自动删除,以避免服务器发送gzip压缩数据回来,无法解压而导致乱码的问题。
“Msxml2.XMLHTTP” 可以自动解压gzip数据。https://www.autohotkey.com/boards/viewtopic.php?f=76&t=51629&hilit=gzip
“Msxml2.XMLHTTP” “Msxml2.ServerXMLHTTP” “WinHttp.WinHttpRequest.5.1” 功能都差不多,2是对3的进一步封装,1和2封装的dll不同,因此只有1能自动解压gzip数据。
版本号为1.6
2016.01.23
----------------------------------------------------------------------------------------------
Timeout存在一些诡异。
图片挖掘机访问一些未知链接,超时不设置时。
会一直访问,永不返回,于是程序就没任何反应了。
访问google。
WaitForResponse(5),SetTimeouts(0, 3000, 30000, 30000)
将在3秒后超时返回,即后者生效。
WaitForResponse(3),SetTimeouts(0, 5000, 30000, 30000)
将在3秒后超时返回,即前者生效。
WaitForResponse(-1),SetTimeouts(0, 5000, 30000, 30000)
将在5秒后超时返回,即后者生效。
WaitForResponse(-1),SetTimeouts(0, 60000, 30000, 30000)
将在21秒后超时返回,原因未知!
下载一个几m大的文件。
WaitForResponse(-1),SetTimeouts(0, 2000, 2000, 3000)
将在30秒后返回正确的文件,即前者生效(可能的原因是接收了1个字节后,SetTimeouts最后一个参数的timeout就不生效了)。
WaitForResponse(50),SetTimeouts(0, 2000, 2000, 3000)
将在30秒后返回正确的文件,即前者生效。
WaitForResponse(10),SetTimeouts(0, 2000, 2000, 3000)
将在10秒后超时返回,即前者生效。
WaitForResponse(10),SetTimeouts(0, 20000, 20000, 30000)
将在10秒后超时返回,即前者生效。
----------------------------------------------------------------------------------------------
2016.01.23
修改超时设置,可以指定任意时长的超时。
版本号为1.5
2015.09.12
优化代码结构。
版本号为1.4
2015.09.11
修正超时会在错误时间被激活的问题。(https://www.autohotkey.com/boards/viewtopic.php?t=9137)
以下是tmplinshi对这个问题的详细描述。
版本号为1.3
2015.06.05
添加静态变量Status、StatusText,用法和ResponseHeaders一致。
添加新功能,若指定状态码与重试次数,将重试n次,直至状态码与预期一致。
版本号为1.2
已知问题:
cookie 没有实现像浏览器那样根据属性值自动管理。但是你可以在需要的时候随时取出,自行管理。
请求头 Content-Type: 末尾会自动追加一个 Charset=UTF-8 (需使用 Fiddler 抓包查看)。
简单示例
MsgBox, % WinHttp.Download("https://www.example.com/") ; 网页内容
MsgBox, % WinHttp.ResponseHeaders["Content-type"] ; 响应头 Content-type 段
MsgBox, % WinHttp.StatusCode ; 状态码
MsgBox, % WinHttp.Cookie ; Cookie
objParam := {"file": ["截图.png"]} ; CreateFormData 示例
WinHttp.CreateFormData(out_postData, out_ContentType, objParam,,,"image/jpg")
RequestHeaders := "Content-Type: " out_ContentType
MsgBox, % WinHttp.Download("http://snap.ie.sogou.com/recognition",, RequestHeaders, out_postData)
注:源码下载链接在右侧
谢谢,我将尝试。
大佬好,winhttp.ahk最后的
#Include %A_LineFile%..NonNull.ahk
#Include %A_LineFile%..GlobalRegExMatch.ahk
找不到啊
河大大,这个库支持异步并发吗?好像目前没找到方法
异步并发是什么
一般的http请求,获取response时得等待服务端响应后才继续执行后面的代码。
winhttp5.1是支持异步获取的,发送request后不等待响应,直接执行后面的代码。
响应由1个回调函数负责处理结果。
我应该描述不当,是异步请求。
https://learn.microsoft.com/zh-cn/windows/win32/winhttp/winhttprequest
能调用com的方法和属性,不知道能不能调事件?
你试试
大佬,最后面NonNull.ahk没有找到