网络编程
位置:首页>> 网络编程>> XML编程>> 服务端XMLHTTP(ServerXMLHTTP in ASP)进阶应用-User Agent伪装

服务端XMLHTTP(ServerXMLHTTP in ASP)进阶应用-User Agent伪装

作者:xujiwei 来源:HotHeart's BLOG 发布时间:2008-11-11 12:29:00 

标签:XMLDOM,User,Agent,伪装,xmlhttp,setRequestHeader

系列目录:

1. 服务器XMLHTTP(Server XMLHTTP in ASP)基础

2. 服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(上)

3. 服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(下)

这篇开始讲讲ServerXMLHTTP的进阶应用。说是进阶应用,但也就是讲一些在基本应用里没有讲到的属性或者方法之类:)

使用setRequestHeader伪装User-Agent

User-Agent一般是服务端程序用来判断客户端浏览器、操作系统等信息的标志,它的说明可以参考Wiki,譬如在我的电脑 IE7 的UA就是:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;
SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

可以看到,这个UA提供了不少信息,IE版本、Windows版本、.NET版本都有。再看看 Firefox 的:

Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)

UA的格式不是本文的重点,因此,如果需要了解UA的具体格式,可以去Google上找找,另外,在http://www.user-agents.org/这里可以找到目前大多数浏览器、搜索引擎Spider等的UA。

在我们使用 ServerXMLHTTP 发送请求时,它所用的 User-Agent 是以下内容:

Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)

但是,某些网站会限制这个UA的访问,比如Google,如果我们使用以下代码来请求Google的页面,它使用的是默认UA“Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)”:


<%@LANGUAGE="JScript" CODEPAGE="65001"%> 
<% 
// code from xujiwei 
// http://www.xujiwei.cn 
var url = "http://news.google.cn/?output=rss"; 
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0"); 
xmlhttp.open("GET", url, false); 
//xmlhttp.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)"); 
xmlhttp.send(""); 
Response.BinaryWrite(xmlhttp.responseBody); 
xmlhttp = null; 
%>

你会发现,我们会收到一个 403 Forbidden 的错误:

为了使得Google的RSS输出程序能把我们的识别成正常的RSS阅读或者一般浏览器,就需要在请求发出前设置 Request Header。要设置 Request Header,只需要简单的在调用 open 方法之后,send 方法之前使用 setRequestHeader 来设置就行了,它的语法是 xmlhttp.setRequestHeader(key, value)。

下面我们就让Google的RSS输出程序把我们的请求识别为Firefox的请求:

程序代码:


<%@LANGUAGE="JScript" CODEPAGE="65001"%> 
<% 
// code from xujiwei 
// http://www.xujiwei.cn 
var url = "http://news.google.cn/?output=rss"; 
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0"); 
xmlhttp.open("GET", url, false); 
// 设置 User Agent 为 Firefox 的UA 
xmlhttp.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)"); 
xmlhttp.send(""); 
Response.BinaryWrite(xmlhttp.responseBody); 
xmlhttp = null; 
%>

刷新浏览器,显示出了Firefox的RSS预览界面,获取Google资讯RSS成功!

ok,我们能正确得到Google资讯的RSS了,再通过XMLDOM来操作返回的RSS文档,就可以采集Google资讯那海量的新闻了。

 

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com