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

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

系列目录:

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资讯那海量的新闻了。

 

标签:XMLDOM,User,Agent,伪装,xmlhttp,setRequestHeader
0
投稿

猜你喜欢

  • PL/SQL Number数字类型函数

    2010-07-16 13:09:00
  • PSD to CSS —— CSS布局实战新概念系列教程

    2009-05-30 16:40:00
  • 数学公式“四又二分之一”

    2009-01-14 20:03:00
  • 经验总结:ASP与存储过程解析

    2008-11-07 13:33:00
  • CSS网页布局避免滥用DIV元素

    2011-03-30 12:34:00
  • 向MySQL数据库的表中录入数据的实用方法

    2008-12-17 16:24:00
  • 加密处理使密码更安全[CFS编码加密]

    2008-03-19 13:30:00
  • 为你的有序列表添加个性样式

    2009-02-23 13:12:00
  • “你帮我把这个做成这个样子!”—当我听到这句话

    2009-04-16 12:57:00
  • 网页制作了解什么是CSS hack?

    2007-10-21 08:52:00
  • 配置SQL Server文件组对应不同的RAID系统

    2009-01-04 14:31:00
  • JavaScript Table行定位效果

    2009-05-25 10:47:00
  • 巧用正则表达式获取新闻中图片地址

    2010-07-17 13:09:00
  • AJAX简单应用实例-弹出层

    2011-04-14 10:55:00
  • 一些sql语句

    2009-04-10 18:36:00
  • asp 关键词高亮显示(不区分大小写)

    2011-04-07 10:55:00
  • 网站分析方法系列二——分析页面区块价值

    2011-01-06 12:32:00
  • ASP实现表单中容量大的数据的提交方法

    2008-10-16 11:07:00
  • MySQL的root帐户密码重置方法

    2007-08-24 15:53:00
  • jQuery.data()方法与内存泄漏

    2010-04-06 17:20:00
  • asp之家 网络编程 m.aspxhome.com