Excel VBA中HTTP HEAD请求无法正确获取状态码问题排查
问题分析与解决方案
问题1:重定向URL返回200的原因
你在代码中设置了oXmlHttp.followRedirects = True,这个属性会让MSXML2.ServerXMLHTTP自动跟随所有重定向请求,最终返回的是重定向目标页面的状态码(也就是/watch页面的200),而非原始请求返回的303重定向状态码。
问题2:无效URL返回0的原因
代码中使用了On Error Resume Next,它会忽略所有运行时错误。当请求无效URL(比如拼写错误的youtub.com)时,send方法会抛出网络错误,但错误被跳过,nRetVal始终保持初始值0,无法获取到正确的错误状态码。
修改后的代码
Public Function nHeadRequest(sURL As String) As Integer Dim oXmlHttp As Object, nRetVal As Integer On Error GoTo ErrorHandler Set oXmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") ' 禁用自动跟随重定向,获取原始请求的状态码 oXmlHttp.followRedirects = False oXmlHttp.Open "HEAD", sURL, False ' HEAD请求无需设置Content-Type,移除多余请求头 oXmlHttp.send "" nRetVal = oXmlHttp.Status Cleanup: Set oXmlHttp = Nothing nHeadRequest = nRetVal Exit Function ErrorHandler: ' 捕获错误时返回自定义错误标识,可根据需求调整 nRetVal = -1 Resume Cleanup End Function
关键修改说明
- 将
followRedirects设为False:禁止自动跟随重定向,确保拿到原始请求的状态码(比如303)。 - 替换错误处理逻辑:移除
On Error Resume Next,改用定向错误捕获,在请求失败时返回明确的错误标识,避免返回无意义的0。 - 移除多余请求头:HEAD请求不需要发送请求体,
Content-Type设置属于冗余操作,可能干扰服务器响应。
内容的提问来源于stack exchange,提问作者NewSites
相关产品推荐
相关产品推荐

