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

使用VBA与MSXML2.XMLHTTP爬取网页时遇响应异常求助

解决VBA中MSXML2.XMLHTTP请求Detran MS返回跳转提示的问题

看起来你遇到的是典型的网站会话验证/反爬拦截问题——网站会校验请求是否来自合法的用户操作上下文,你的直接POST请求缺少这些必要验证信息,所以被导向跳转提示页。下面是具体的排查思路和解决方案:

核心问题分析

  • 缺失会话Cookie:网站需要请求携带从主查询页面获取的会话标识,否则会判定请求非法
  • 关键请求头缺失:比如Referer(验证请求来源页面)、User-Agent(模拟浏览器身份),这些是很多网站判断是否为爬虫的基础依据
  • 参数格式不匹配:部分交管系统对车牌(placa)的大小写敏感,小写参数可能无法被正确识别

修改后的可运行代码

下面的代码会先建立合法会话,再携带所有必要信息发送POST请求:

Sub SearchVehicle()
    Dim strPlaca As String
    Dim strRenavam As String
    strPlaca = UCase("oon5868") ' 转换为大写,匹配网站参数校验规则
    strRenavam = "01021783231"
    
    Dim oXmlPage As MSXML2.XMLHTTP60
    Dim strMainUrl As String
    Dim strPostUrl As String
    Dim strPostData As String
    
    Set oXmlPage = New MSXML2.XMLHTTP60
    
    ' 第一步:先访问查询主页面,获取会话Cookie和合法上下文
    strMainUrl = "http://www.detran.ms.gov.br/consulta-de-debitos/"
    oXmlPage.Open "GET", strMainUrl, False
    oXmlPage.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"
    oXmlPage.send
    
    ' 第二步:发送POST请求,携带会话信息和验证头
    strPostUrl = "http://www2.detran.ms.gov.br/detranet/nsite/veiculo/veiculos/retornooooveiculos.asp"
    strPostData = "placa=" & strPlaca & "&renavam=" & strRenavam
    
    oXmlPage.Open "POST", strPostUrl, False
    oXmlPage.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    oXmlPage.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"
    oXmlPage.setRequestHeader "Referer", strMainUrl ' 告知服务器请求来自合法入口页
    oXmlPage.setRequestHeader "Cookie", oXmlPage.getResponseHeader("Set-Cookie") ' 携带会话Cookie
    
    oXmlPage.send strPostData
    
    ' 输出响应结果,你可以在这里解析Chassis信息
    Debug.Print oXmlPage.responseText
End Sub

关键修改说明

  1. 预访问主页面:通过GET请求获取服务器生成的会话Cookie,建立合法的用户操作上下文
  2. 模拟浏览器标识:添加User-Agent头,避免被网站识别为非浏览器请求
  3. 校验请求来源:添加Referer头,证明请求是从官方查询页面发起的
  4. 维持会话一致性:将主页面获取的Cookie传递给POST请求,确保服务器识别为同一会话
  5. 统一参数格式:将车牌转换为大写,匹配交管系统的参数校验规则

额外注意事项

  • 确保你的VBA工程已引用Microsoft XML, v6.0(可通过「工具」→「引用」找到并勾选)
  • 如果仍然无法获取有效响应,可以尝试替换为MSXML2.ServerXMLHTTP60对象,它在处理部分网站的反爬机制时兼容性更好
  • 请严格遵守网站的使用条款和当地法律法规,确保爬虫行为合法合规

内容的提问来源于stack exchange,提问作者Adriano Ianase

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:37