You need to enable JavaScript to run this app. 如何使用VBA的XMLHTTP请求获取UID查询页面返回的表格内容
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VBA的XMLHTTP请求获取UID查询页面返回的表格内容

你的XMLHTTP请求失效的核心原因是MSXML2.XMLHTTP不会自动维护会话Cookie,而目标站点的UID查询功能依赖首次访问页面时下发的会话Cookie校验,直接向list.php发起POST请求会因为缺少有效Cookie被站点拦截,因此无返回内容。Python的requests库默认会自动管理同一会话下的Cookie,所以相同逻辑可以正常运行。

修复后的完整代码如下:

Sub FetchContentWithXMLHTTP()
    Const INDEX_URL = "https://uid.theclearinghouse.org/index.php"
    Const POST_URL = "https://uid.theclearinghouse.org/list.php"
    Dim cookieStr As String
    Dim xmlhttp As Object
    
    Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")
    
    ' 第一步:先访问首页获取会话Cookie
    With xmlhttp
        .Open "GET", INDEX_URL, False
        .send
        ' 提取响应头中的Cookie核心字段
        cookieStr = Split(.getResponseHeader("Set-Cookie"), ";")(0)
    End With
    
    ' 第二步:携带Cookie发起POST请求
    With xmlhttp
        .Open "POST", POST_URL, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .setRequestHeader "Referer", "https://uid.theclearinghouse.org/index.php"
        .setRequestHeader "Cookie", cookieStr
        .send "UidNum=410611&SubmitUid=Go%21"
        ' 校验响应状态正常后输出内容
        If .Status = 200 Then
            Debug.Print .responseText
        Else
            Debug.Print "请求失败,状态码:" & .Status
        End If
    End With
End Sub

补充说明:

  • 建议使用MSXML2.XMLHTTP.6.0替代默认低版本对象,兼容性更强,可避免部分系统下的组件调用异常
  • 如果需要解析返回的表格内容,可搭配HTMLDocument对象加载responseText后,用DOM方法提取对应表格数据即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:54:04