如何在VBScript中获取http响应头

Ali*_*Dbg 4 vbscript header xmlhttprequest

为什么这个 .vbs 脚本检索空值?

Option Explicit
On Error Resume Next
Dim h: Set h = CreateObject("MSXML2.XMLHTTP")
h.Open "HEAD", "http://google.com/", False
h.send
Dim GetLocation: Set GetLocation = h.getResponseHeader("Location")
MsgBox GetLocation
Run Code Online (Sandbox Code Playgroud)

Kul*_*gin 6

几乎所有 HTTP 库默认都遵循重定向。因此,只要遵循重定向,
就无法获取标头,因此需要停止遵循重定向。 我推荐两种不同的解决方案。Location

#1获得最终 url 将是最简单的方法,而不是获取Locationheader。

Option Explicit

Dim GetLocation
Const SXH_OPTION_URL = -1

Dim h
Set h = CreateObject("MSXML2.ServerXMLHTTP")
    h.Open "HEAD", "http://google.com/", False 
    h.send
GetLocation = h.getOption(SXH_OPTION_URL) 'final URL even if redirected

MsgBox GetLocation
Run Code Online (Sandbox Code Playgroud)

#2如果您想确保获得第一个 Location标头(而不是重定向链中的最后一个链接),您应该通过禁用重定向来使用WinHttpRequest,这样您就可以获取标头(如果可用)。

Option Explicit

Dim GetLocation
Const WHR_EnableRedirects = 6

Dim h
Set h = CreateObject("WinHttp.WinHttpRequest.5.1")
    h.Option(WHR_EnableRedirects) = False 'disable redirects
    h.Open "HEAD", "http://google.com/", False
    h.Send
GetLocation = h.GetResponseHeader("Location") 'an error occurs if not exist

MsgBox GetLocation
Run Code Online (Sandbox Code Playgroud)