VBS获取重定向的URL

标签: , , ,

某个人问的问题:

我本来想获取aaa.com页面的内容,可是aaa.com跳转到bbb.com了。我想获取bbb.com 这个网址。

访问了一下他所谓的aaa.com,发现是HTTP 302重定向

HTTP/1.1 302 Moved Temporarily
Server: nginx/0.8.53
Date: Fri, 08 Apr 2011 15:49:25 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.15
Location: http://tuan.sohu.com/beijing/life/

为了测试方便,我写了一个302.php,重定向到小顾de杂记:

<?php
header('Location: http://ihipop.info/');
?>

先用XMLHTTP试试:

Dim http
Set http = CreateObject("Msxml2.ServerXMLHTTP")
http.open "GET", "http://demon.tw/test/302.php", False
http.send
WScript.Echo http.responseText

XMLHTTP组件在处理包含Location头的302消息时太智能,直接给跳转到Location指定的页面了。

XMLHTTP不行,我们还有WinHttp.WinHttpRequest.5.1,该组件的Option属性的第六个索引EnableRedirects就是指示是否自动跳转:

Dim WinHttp
Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
WinHttp.Open "GET", "http://demon.tw/test/302.php", False
WinHttp.Option(6) = False
WinHttp.Send
WScript.Echo WinHttp.GetResponseHeader("Location")

问题就这样完美的解决了,但是那个人连声谢谢都没有,真是世风日下。

随机文章:

  1. 将WMI中的DateTime类型转换成VBS时间
  2. 没有找到msgmanage.dll
  3. Turbo C 2.01官方下载
  4. VBS对象作为过程参数是ByVal还是ByRef?
  5. 利用WMI打造完美“三无”后门-U盘侦测与Autorun

15 条评论 发表在“VBS获取重定向的URL”上

  1. PopEye说道:

    MSDN说MSXML2.ServerXMLHTTP有个getOption(-1)应该也可以得到RedirectedURL,但是试了下发现总是报“参数错”,Google下发现需要指定MSXML 4.0及以上才可以。再试,终于可以了。但是速度要慢不少,也许相比较WinHttpRequest.5.1还不够底层吧。
    Set objMSXML2 = CreateObject(“MSXML2.ServerXMLHTTP.4.0”)
    objMSXML2.open “GET”,”http://demon.tw/test/302.php”, False
    objMSXML2.send
    WScript.Echo objMSXML2.getOption(-1)

  2. linkanyway说道:

    都是牛人啊

  3. cylisme说道:

    用WinINet更底层
    的确是世风日下了,都懒得回答了

  4. prophetk说道:

    那人是出于嫉妒吧,呵呵

  5. BALTHASAR说道:

    WinHttpRequest.5.1是ICS层的东西,禁用STATION服务和ICS之后VBS会抛出异常。。。。

  6. hunzi说道:

    谢谢。正用的着。不过用VB还是回有点点错误的。不是提供了个很好的思路。

  7. bch说道:

    感谢你!你的“VBS获取重定向的URL”文章使我受益匪浅谢谢!

  8. bch说道:

    用xmlhttp,有些网站登陆后获取cookie,却找不到set-cookie,但浏览器控制台却能看到,就是因为30X后,获取的是跳转后页面的http头。拒绝自动跳转就好了。

  9. eixtweb说道:

    请教下,有谁知道asp调用WinINet的方法吗?能否帮我写个asp调用WinINet例子呢?万分感谢~~

  10. 真的风清扬说道:

    博主,近几月从度娘来到贵博次数好多,禁不住拜读了一些之后,我对你的景仰之情尤如滔滔江水….
    不说别的,一个字:相见恨晚啊,毅然决定收藏你,然后每一遍仔细研究你,因为我的工作经常用到vbs,而你是vbs之神…

    在此小弟请教你一个难题:vbs中如何在子function中抛出异常不触发,而是想要在调用他的行中触发,因我的程序经常在一个被多次调用的function 中发现参数值有错,但不知道在哪个文件哪一行调用的。

    我用Err.Raise方法测试过多种,但因水平有限好像搞不定。在此先表示感谢和敬意,有空的话还望不吝赐教!

留下回复