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

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

  1. 向 www.foo.com 的服务器发送 http 请求
  2. 检查请求状态
  3. 如果是 200 则转到第 4 步,否则显示错误
  4. 解析所有链接
  5. 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 中的链接查找器的任何其他想法

【问题讨论】:

    标签: vb.net asp-classic http-status-code-301 http-redirect serverxmlhttp


    【解决方案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 对象事件。我还在stackoverflow.com/questions/20552183 上发布了有关此问题的问题@ 我需要回调函数来处理异步 http 请求。
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多