You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MSXML2.XMLHTTP调用含Cloudflare域名时遇“请启用Cookie”错误求助

解决Cloudflare拦截VBScript HTTP请求的问题

问题原因

Cloudflare基础防护会校验请求是否来自真实浏览器,你的原代码使用MSXML2.XMLHTTP时,默认未启用完整Cookie支持,且请求头过于简单,被判定为非合法请求,触发"please enable cookies"提示。

解决方案

1. 替换为支持Cookie容器的HTTP对象

MSXML2.XMLHTTP的Cookie处理能力有限,改用WinHttp.WinHttpRequest.5.1或MSXML2.ServerXMLHTTP.6.0,二者原生支持Cookie存储,可满足Cloudflare的Cookie检测要求。

2. 添加浏览器级请求头

模拟真实浏览器的请求头信息,避免被识别为爬虫,核心头包括User-Agent、Accept、Accept-Language等。

3. 处理初始验证逻辑

部分场景下,第一次请求会返回Cloudflare验证页面,需先发起请求获取cf_clearance Cookie,再携带该Cookie请求目标URL;若需JavaScript验证,则需用浏览器自动化方案。

代码示例

方案1:使用WinHttp.WinHttpRequest.5.1

Set objWeb = CreateObject("WinHttp.WinHttpRequest.5.1")
' 启用重定向与Cookie支持
objWeb.Option(6) = True
objWeb.Option(12) = True

' 模拟Chrome浏览器请求头
objWeb.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
objWeb.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
objWeb.SetRequestHeader "Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"

' 首次请求获取Cookie
objWeb.Open "GET", URL, False
objWeb.Send

' 二次请求目标URL(自动携带Cookie)
objWeb.Open "GET", URL, False
objWeb.Send

strXML = objWeb.ResponseText
WScript.Echo strXML

方案2:使用MSXML2.ServerXMLHTTP.6.0

Set objWeb = CreateObject("MSXML2.ServerXMLHTTP.6.0")
' 启用Cookie支持并设置请求头
objWeb.SetOption 2, 13056
objWeb.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
objWeb.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
objWeb.SetRequestHeader "Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"

objWeb.Open "GET", URL, False
objWeb.Send

strXML = objWeb.ResponseText
WScript.Echo strXML

方案3:IE自动化(应对JS验证场景)

若Cloudflare要求JavaScript验证,上述方案失效时,可模拟浏览器操作:

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False ' 设置为True可查看浏览器窗口
ie.Navigate URL

' 等待页面加载完成
Do While ie.Busy Or ie.ReadyState <> 4
    WScript.Sleep 100
Loop

' 获取返回文本
strXML = ie.Document.Body.InnerText

ie.Quit
Set ie = Nothing

WScript.Echo strXML

注意事项

  • Cloudflare防护规则会动态更新,若当前方案失效,需调整请求头或升级模拟逻辑;
  • 高频请求可能触发验证码验证,需控制请求频率。

内容的提问来源于stack exchange,提问作者Felipe Tejeda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:05:19