ServerXMLHTTP请求返回数据但301重定向后不返回最终页面的url

Posted

技术标签:

【中文标题】ServerXMLHTTP请求返回数据但301重定向后不返回最终页面的url【英文标题】:ServerXMLHTTP request returing data but not returning url of final page after 301 redirection 【发布时间】:2013-12-19 22:52:23 【问题描述】:

我正在尝试在 ASP 中制作 LINK FINDER 应用程序它的工作分为 5 个步骤

    向 www.foo.com 的服务器发送 http 请求 检查请求状态 如果是 200 则转到第 4 步,否则显示错误 解析所有链接 Send http request to server to parsed link

我可以做前 4 步,但在第 5 步面临挑战

我得到了 3 种类型的链接

1.)绝对链接:http://www.foo.com/file.asp 2.)来自根目录的链接,需要域名例如/folder2/file2.asp 3.)相对链接:../file3.asp

挑战

当我请求 www.foo.com 时,301 重定向 到 www.foo.com/folder3/folder3/file3.asp em>

我正在获取重定向页面的 html 内容,但是没有得到重定向的 url 并且无法检查第三种类型的链接

使用以下代码

Set ServerXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
ServerXmlHttp.open "GET", "http://www.foo.com"
ServerXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ServerXmlHttp.send PostData
If ServerXmlHttp.status = 200 Then
 //My CODE

希望快速响应... 或在 asp、vb.net 中的链接查找器的任何其他想法

【问题讨论】:

【参考方案1】:

它超出了 ServerXMLHTTP 的功能。 相反,您必须使用 IWinHttpRequest 或其他能够管理重定向的第三方组件。 在以下示例中,req.Option(WHR_URL) 即使被重定向也会返回当前 url。 选项 req.option(WHR_EnableRedirects) 默认为 True,如 ServerXMLHTTP。 所以,我添加了一行注释掉显示如何禁用重定向。

Const WHR_URL = 1
Const WHR_EnableRedirects = 6
'Enum constants are listed at http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx
Dim req
Set req = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
    'req.Option(WHR_EnableRedirects) = False 'don't follow the redirects
    req.open "GET", "http://www.foo.com", False
    req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.send PostData
If req.Status = 200 Then
    Response.Write "Last URL : " & req.Option(WHR_URL)
End If

【讨论】:

gr88888.... 我想知道的一件事。为什么你定义了两个常量? 我还可以跟踪从 请求的 url 到最终 url 的所有重定向吗? @Dr_Dang 枚举常量列在goo.gl/b4817X 下的常量部分,分别从零开始。如果你不使用它们,当然你也可以使用数值。是的,您可以跟踪。使用 req.Status 禁用重定向并处理 3xx 状态,然后使用 req.GetResponseHeader("Location") 通过给定 Location 标头获取 url。 我无法使用 WinHttp.WinHttpRequest.5.1 对象事件。我还在***.com/questions/20552183 上发布了有关此问题的问题@ 我需要回调函数来处理异步 http 请求。

以上是关于ServerXMLHTTP请求返回数据但301重定向后不返回最终页面的url的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 请求返回 301 重定向

问题:nginx 如何处理301 ?

接口返回状态码

VBA如何捕获请求超时错误?

如何防止 ServerXMLHTTP 自动跟随重定向(HTTP 303 请参阅其他响应)?

http状态码