VBA网页内发送HTTP请求问题:发送GET请求后无响应如何排查
如何确认VBA中发送的GET请求是否真实发送?
先说说你的场景:公司用网页唤起软件的系统,你想用VBA自动化批量打开应用,已经搞定了IE的登录,但用XMLHTTP60发送GET请求后没任何反应,想确认这个请求到底有没有发出去对吧?我给你几个实用的验证方法,顺便帮你排查下为啥没反应:
1. 直接从XMLHTTP对象获取响应信息
这是最直接的办法,发送请求后,马上打印状态码和响应内容,就能知道请求的结果:
在你的xhrRequest.send代码后面加上这段:
' 打印请求状态码和响应内容到VBA的立即窗口 Debug.Print "请求状态码: " & xhrRequest.Status Debug.Print "服务器响应内容: " & xhrRequest.ResponseText
然后按Ctrl+G打开VBA的立即窗口,运行代码看输出:
- 如果状态码是
200,说明请求成功发送并得到了服务器响应; - 如果是
401/403,大概率是会话不共享的问题(IE登录的Cookie没带到XMLHTTP请求里,服务器认不出你是已登录用户); - 如果状态码是
0或者没有输出,可能请求根本没发出去(比如URL写错了、网络问题)。
2. 用抓包工具监控网络请求
用Fiddler这类抓包工具,能全程监控VBA发出的所有网络请求:
- 打开Fiddler,确保它能捕获本地请求;
- 运行你的VBA代码;
- 在Fiddler的会话列表里搜索你请求的URL(
http://getrequest):- 如果能找到这条会话,说明请求确实发送了,你可以点进去看请求头、响应内容,排查为啥没效果;
- 如果找不到,说明代码里的请求没有被触发,检查下URL是否正确、
xhrRequest.Open和xhrRequest.send有没有执行到。
3. 解决会话不共享的问题(顺便验证请求)
这里提个关键点:IE的登录会话和XMLHTTP是完全独立的,IE里的登录Cookie不会自动传给XMLHTTP,所以你发送的GET请求可能是未授权的,服务器直接忽略或者返回了错误,但你没处理响应,所以看起来没反应。
你可以试试把IE的Cookie加到XMLHTTP的请求头里,代码修改成这样:
xhrRequest.Open "GET", "http://getrequest", False ' 把IE当前的Cookie加到请求头里 xhrRequest.setRequestHeader "Cookie", ie.document.cookie xhrRequest.send ' 然后打印响应信息 Debug.Print "状态码: " & xhrRequest.Status Debug.Print "响应: " & xhrRequest.ResponseText
如果加了Cookie后有响应了,说明之前请求其实发了,但因为没登录状态被服务器拒绝了;如果还是没反应,再结合前面的方法排查。
4. 查看服务器访问日志(如果有权限)
如果你们公司运维或后端同事允许的话,让他们查一下服务器的访问日志,搜索你发送请求的客户端IP和目标URL:
- 如果日志里有对应的请求记录,说明请求肯定发出去了,问题出在服务器的处理逻辑或者响应上;
- 如果没有,那就是请求没离开你的电脑,检查代码和网络连接。
内容的提问来源于stack exchange,提问作者Serveira
相关产品推荐
相关产品推荐

