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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:35:17