获取软件下载的真实地址!再谈获取Response.redi
对于这个问题,尽管已经讨论多次,但仍然有很多人关注。包括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"?>` `
"` `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")
微信营销
- 获取软件下载的真实地址!再谈获取Response.redi
- Laravel 5框架学习之数据库迁移(Migrations)
- 如何理解象棋术语中的老兵
- jQuery手机拨号界面特效代码分享
- JavaScript中的对象和原型(一)
- jQuery实现获取元素索引值index的方法
- 远古战场冥想地方
- 关于base64编码的原理及实现方法分享
- 胡慧中电影大赏:如何观看她的电影全集
- 基于.net4.0实现IdentityServer4客户端JWT解密
- php中0,null,empty,空,false,字符串关系的详细介绍
- Fiddler4的安装与使用详解
- 通过实例分析MySQL中的四种事务隔离级别
- 使用Javascript实现选择下拉菜单互移并排序
- react native仿微信PopupWindow效果的实例代码
- 还有什么等待还有什么悲哀什么歌