日期:2010-02-02  浏览次数:20946 次

一般在远程抓取网页内容时,通常都会用到如下代码:

Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "GET", "http://diary.tw/tim/", False
xmlhttp.Send
Response.Write xmlhttp.ResponseTEXT
Set xmlhttp = Nothing

不过这个有一些些问题, 因为 XMLHTTP 本身的工作行为是绑在 IE API 上, 当然是有好有坏, 根据微软的文件, 这组组件是适合用在客户端而非 server 端, 在使用上会有一些稳定及效能的问题, 不过更有趣的还有一个地方, 就是他会增进效能而在本机的文件系统上存入访问的内容, 路径如下:

C:\WINDOWS\Temp\Temporary Internet Files\Content.IE5

也就是说, 会占用掉部分的空间, 但实际观察又不全然是这种 cache 的状况, 因为相同的网页, 被重复 reload 时, 该 cache 用的目录居然也会成长, 也就是说, 原来设计为 cache 的功能, 也有可能用不到, 但用不到还没关系, 会一直占用空间成长(无上限), 这个就比较麻烦了.

之前笔者在追踪一个案例(c:碟占用空间持续成长的状况), 原来就是这个组件的毛病, 实际再测, 若是访问的网页是非 xml 时, 似乎就没有这种状况, 不过大多数的应用环境, 数据都会选 xml 的方式来传送, 所以仍会有这个问题存在.

为了解决这个问题, 还有另一组组件可供使用, MSXML2.ServerXMLHTTP, 这组组件提供了更稳定的方式来执行前述功能, 而且几乎完全兼容语法, 并提供了更多的功能, 也不会产生大量的cache 临时文件, 我们来看看微软官网上对此二者的比较:

http://support.microsoft.com/kb/290761

主要差异点如下:
XMLHTTP is designed for client applications and relies on URLMon, which is built upon Microsoft Win32 Internet (WinInet). ServerXMLHTTP is designed for server applications and relies on a new HTTP client stack, WinHTTP. ServerXMLHTTP offers reliability and security and is server-safe. For more information, see the MSXML Software Development Kit (SDK) documentation.


如此一来便可以很清楚地了解在 asp 程序内, 使用 XMLHTTP 及 ServerXMLHTTP 的差异了, 将上面的程序代码改为:


Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "GET", "http://www.aiyiweb.com/", False
xmlhttp.Send
Response.Write xmlhttp.ResponseTEXT
Set xmlhttp = Nothing
 
这样,就解决了产生大量无限增长的垃圾文件的问题了,赶快检查你的代码吧:)
更多技术资讯欢迎访问爱易学习网www.aiyiweb.com技术平台。