标题: VBS获取重定向的URL
作者: Demon
链接: https://demon.tw/programming/vbs-http-302-redirect.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
某个人问的问题:
我本来想获取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", "https://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", "https://demon.tw/test/302.php", False WinHttp.Option(6) = False WinHttp.Send WScript.Echo WinHttp.GetResponseHeader("Location")
问题就这样完美的解决了,但是那个人连声谢谢都没有,真是世风日下。
赞赏微信赞赏
支付宝赞赏
随机文章:
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)
都是牛人啊
用WinINet更底层
的确是世风日下了,都懒得回答了
那人是出于嫉妒吧,呵呵
我声明那人不是我!
WinHttpRequest.5.1是ICS层的东西,禁用STATION服务和ICS之后VBS会抛出异常。。。。
谢谢。正用的着。不过用VB还是回有点点错误的。不是提供了个很好的思路。
感谢你!你的“VBS获取重定向的URL”文章使我受益匪浅谢谢!
用xmlhttp,有些网站登陆后获取cookie,却找不到set-cookie,但浏览器控制台却能看到,就是因为30X后,获取的是跳转后页面的http头。拒绝自动跳转就好了。
请教下,有谁知道asp调用WinINet的方法吗?能否帮我写个asp调用WinINet例子呢?万分感谢~~
博主,近几月从度娘来到贵博次数好多,禁不住拜读了一些之后,我对你的景仰之情尤如滔滔江水….
不说别的,一个字:相见恨晚啊,毅然决定收藏你,然后每一遍仔细研究你,因为我的工作经常用到vbs,而你是vbs之神…
在此小弟请教你一个难题:vbs中如何在子function中抛出异常不触发,而是想要在调用他的行中触发,因我的程序经常在一个被多次调用的function 中发现参数值有错,但不知道在哪个文件哪一行调用的。
我用Err.Raise方法测试过多种,但因水平有限好像搞不定。在此先表示感谢和敬意,有空的话还望不吝赐教!