首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>ASP教程>资讯:asp通过xmlhttp获取网页不完整

asp通过xmlhttp获取网页不完整

www.jz123.cn  2009-06-08   来源:   中国建站会员投稿    草上飞    我要投递新闻

  自己写的友情链接检查工具,一直用得挺好,不过最近有人说,输入他的网址后,工具提示找不到友情链接。其中一个用户提出的网址为:http://www.nipei.com/index.php

  于是按照惯例,在本地进行调试。发现确实找不到友情链接,仔细看看通过xmlhttp返回的内容,到了某个地方后,后面部分竟然丢失了,仔细检查了xmlhttp获取网页的方法,也看了二进制转换成字符串的函数,可是一直没能找到这个问题的原因。百度和google也搜索了,不过都没有类似的问题,真是郁闷到了极点。

  写了个最简单的代码如下:


<%
url
="http://www.nipei.com/index.php"
Set Http=server.createobject("msxml2.serverxmlhttp.3.0")

Http.setTimeouts
10000, 10000, 10000, 10000
Http.open
"GET",url,False
Http.Send()

If Http.Readystate<>4 Then

Else
   
   
If Http.status=200 Then
        response.write BytesToBstr(http.responseBody,"gb2312")
   
End If
End If

Function BytesToBstr(Body,Cset)
  
Dim Objstream
  
Set Objstream = Server.CreateObject("adodb.stream")
   objstream.Type
= 1
   objstream.Mode
=3
   objstream.Open
   objstream.Write body
   objstream.Position
= 0
   objstream.Type
= 2
   objstream.Charset
= Cset
   BytesToBstr
= objstream.ReadText
   objstream.Close
  
set objstream = nothing
End Function
%
>

  不管怎么修改这段代码,得到的内容总是不完整。大家可以把这个段代码拷过去调试一下。我也试过其他组件,如asphttp,inet等组件,都不能得到整个页面的内容。

  最后只能到程序员论坛CSDN求救,终于得到答案,原来这个是adodb.stream的一个BUG,因为其中包含了chr(0),导致认为文件已经结束,而导致后面的内容不会获取,从而导致xmlhttp获得的文件内容不完整。

  修改该代码,将chr(0)替换成""后,程序运行正常,能抓取到页面的整个内容。修改后的代码为:


<%
url
="http://www.nipei.com/index.php"
Set Http=server.createobject("msxml2.serverxmlhttp.3.0")

Http.setTimeouts
10000, 10000, 10000, 10000
Http.open
"GET",url,False
Http.Send()

If Http.Readystate<>4 Then

Else
   
   
If Http.status=200 Then
        
        response.write replace(BytesToBstr(http.responseBody,"gb2312"),chr(10),"")
   
End If
End If

Function BytesToBstr(Body,Cset)
  
Dim Objstream
  
Set Objstream = Server.CreateObject("adodb.stream")
   objstream.Type
= 1
   objstream.Mode
=3
   objstream.Open
   objstream.Write body
   objstream.Position
= 0
   objstream.Type
= 2
   objstream.Charset
= Cset
   BytesToBstr
= objstream.ReadText
   objstream.Close
  
set objstream = nothing
End Function
%
>


上一篇:ASP常用函数 储存单位转换函数:FormatFileSize() 下一篇:ASP实例教程:长文章分页功能

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图