如何为AutoHotkey UrlDownloadToFile的SEC请求设置合规请求头
解决方案
原生AutoHotkey自带的UrlDownloadToFile命令不支持自定义请求头,无法满足SEC的访问要求,直接换用Windows系统内置的WinHttp组件实现下载即可,不需要安装任何额外软件、编译器或者第三方库,全量支持自定义所有要求的请求头。
可直接复用的实现代码
把代码里的占位信息替换成你自己的真实信息即可使用:
; -------------------------- 配置项 开始 -------------------------- ; 必须替换为合规的User-Agent,格式:你的主体名称 联系邮箱,例:"MyResearchTeam contact@mycompany.com" sUA := "你的个人/企业名称 你的有效联系邮箱" ; 替换为你要下载的SEC文件地址 sURL := "https://www.sec.gov/Archives/edgar/data/<document ID>/xslFormDX01/primary_doc.xml" ; 替换为本地文件保存路径 sSaveAs := "C:\sec_files\primary_doc.xml" ; -------------------------- 配置项 结束 -------------------------- ; 创建请求对象(Windows系统内置,无需额外下载) req := ComObjCreate("WinHttp.WinHttpRequest.5.1") req.Open("GET", sURL, false) ; 按SEC要求设置全部请求头 req.SetRequestHeader("User-Agent", sUA) req.SetRequestHeader("Accept-Encoding", "gzip, deflate") req.SetRequestHeader("Host", "www.sec.gov") ; 发送请求并保存文件 req.Send() FileDelete, %sSaveAs% FileAppend, %req.ResponseBody, %sSaveAs%
提示:如果下载后的文件出现乱码,把代码里的
req.ResponseBody替换为req.ResponseText即可自动处理gzip解码。
注意:必须控制请求频率,每秒请求数不能超过10次,建议每次请求后加150ms以上的间隔,避免被拦截。
你提到的其他方案说明
edgarWebR是R语言生态的第三方工具包,它的EDGARWEBR_USER_AGENT环境变量仅对R环境下调用该包发起的请求生效,和AutoHotkey脚本完全无关,配置后不会生效。- 你找到的第三方AHK替代
UrlDownloadToFile函数是纯AHK编写的,不需要C编译器,使用时只需要把函数代码粘贴到你的脚本顶部,或者把对应ahk文件放到脚本同级Lib目录即可调用,但本质和上面给出的WinHttp实现逻辑一致,直接用上面的代码更简洁,不需要额外引入第三方代码。 - 论坛提到的
UrlMkSetSessionOption方案仅能修改全局User-Agent,无法自定义Accept-Encoding等其他请求头,还会影响进程内所有HTTP请求的默认配置,不推荐使用。
请求头相关问题说明
Host头绝大多数HTTP客户端会默认自动填充为请求的目标域名,正常情况下不手动设置也不会触发拦截,手动添加只是为了完全匹配SEC给出的合规要求,避免极端场景下被误拦截。Accept-Encoding头如果不设置,不会直接导致访问被拦截,但会让服务端返回未压缩的内容,拉低传输效率,建议按要求配置。
合规提醒
User-Agent里填写的联系邮箱必须真实有效,SEC如果监测到异常流量会通过该邮箱联系你,填写虚假信息会导致IP被永久封禁。
内容的提问来源于stack exchange,提问作者NewSites
相关产品推荐
相关产品推荐

