获取软件下载的真实地址!再谈获取Response.redi

网络营销 2025-04-05 17:37www.168986.cn短视频营销

对于这个问题,尽管已经讨论多次,但仍然有很多人关注。包括care4在内,许多开发者都曾过这个问题。如果你也有类似疑问,最好的办法是首先进行搜索,因为很可能已经有人找到了解决方案。关于care4的代码,虽然有其独特的优点,但也存在一个小小的缺陷:它需要组件的支持。一些开发者曾寻找不需要特定组件的ASP获取方式。答案是肯定的,我曾经编写过一个简单的VB winsock获取代码。在那个时候,我发现使用ASP似乎无法获取所需信息。现在,我们已经找到了新的方法。

我们需要理解为什么xmlhttp组件无法获取跳转的真实地址。当使用Response.Redirect进行跳转时,PHP会选择使用Header("Location,$URL)的方式来处理。这两种方式的原理是一样的,即在输出的HTTP头中加入一个Location字段,将HTTP状态值设为302。浏览器会理解当前请求的页面已被移动到Location字段指定的路径。xmlhttp无法获取这一跳转的原因在于:XMLHTTP组件在处理包含Location头的302消息时过于智能,直接跳转到指定页面,忽略了中间过程。

幸运的是,MSXML4提供了一个新的组件WinHttp.WinHttpRequest.5.1,它是MSXML4 XMLHTTP组件的核心。这个组件有一个关键的Option属性,第六个索引就是指示是否自动跳转的选项。通过这个属性,我们可以轻松地使用XMLHTTP组件的getResponseHeader和getAllResponseHeaders方法来获取返回的HTTP头信息。

接下来是具体的代码实现。首先创建一个新的WinHttp.WinHttpRequest.5.1对象,并设置其Option(6)属性为0,禁止自动Redirect。然后设置超时时间,以同步模式打开URL。如果返回的状态码不是200也不是302,我们可以选择忽略或者处理这些状态码(例如440等)。如果状态码是200,说明这就是最终页面,没有Location跳转;如果是302,需要根据HTTP头进行跳转。在这两种情况下,我们可以对返回的HTTP头和文档内容进行处理。完整的代码比较长,我已经将其上传到我的空间上,你可以点击查看源代码来了解这个ASP文件的详细实现。默认的输入栏里是一个下载地址,你可以测试一下来验证这个方法的可行性。

一切已准备就绪,继续前往CSDN混分区域了。下面是一段关于URL处理的代码,这段代码的主要功能是通过一系列步骤获取最终的绝对URL。

```asp

<%

Public Function Bytes2BSTR(v)

Dim r, i, t, n : r = ""

For i = 1 To LenB(v)

t = AscB(MidB(v, i, 1))

If t < &H80 Then

r = r & Chr(t)

Else

n = AscB(MidB(v, i + 1, 1))

r = r & Chr(CLng(t) & H100 + CInt(n))

i = i + 1

End If

Next

Bytes2BSTR = r

End Function

If Request.QueryString = "ViewSource" Then

Dim oFso : Set oFso = Server.CreateObject("Scripting.FileSystemObject")

Dim oFil : Set oFil = oFso.OpenTextFile(Server.MapPath("URL.Asp"))

Dim sTxt : sTxt = oFil.ReadAll()

oFil.Close : Set oFil = Nothing : Set oFso = Nothing

Response.ContentType = "text/plain"

Response.Write sTxt

Response.END

End If %>

```xml version="1.0" encoding="gb2312" standalone="yes"?>` `` `` `` `` `` `` `` `` `` `` `` `` `

` `要检测的URL"" Then Response.Write Trim(Request.Form("URL")) Else Response.Write " End If %>" />` `` `` `
` `<%` `Public Function GetAbsoluteURL(sUrl, ByRef iStep)` `Dim bUrl, bDat` `If iStep > 15 Then Err.Raise vbObjectError, "递归错误", "递归嵌套超过15层可能会引起程序崩溃"` `If InStr(sUrl, "://") <= 0 Then sUrl = " & sUrl` `If InStr(sUrl, "?") > 0 Then` `Dim tmpUrl : tmpUrl = split(sUrl, "?")` `bUrl = tmpUrl(0)` `bDat = tmpUrl(1)` `Else` `bUrl = sUrl` `bDat = ""` `End If` `Response.Write "

"` `Response.Write "第 " & iStep & " 步"` `Response.Write "正在准备获取 " & bUrl & "
"`` `iStep = iStep + 1` `if bDat <> "" Then Response.Write "  >>参数 " & bDat & "
" End If`` ``Dim oHttp : Set oHttp = Server.` ``CreateObject("WinHttp.` ``WinHttpRequest.` ``5.` ``1")

上一篇:Laravel 5框架学习之数据库迁移(Migrations) 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by