如何使用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
相关产品推荐
相关产品推荐

