serverXMLHTTP采集遇到的问题
最近写一个采集程序,别的都没问题,但是搜狐却怎么都采集不上,大家帮看看什么问题,代码很简单:
VBScript code
dim url:url = "http://news.sohu.com/20100807/n274046449.shtml"
set xmlHttp = server.CreateObject("msxml2.serverXMLHTTP.3.0")
xmlHttp.setTimeouts 10000,10000,100000,100000
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.setRequestHeader "Pragma","no-cache"
xmlHttp.setRequestHeader "Cache-Control","no-cache"
xmlHttp.setRequestHeader "Accept-Encoding","none"
xmlHttp.send()
if xmlHttp.readystate = 4 then
if xmlHttp.status = 200 then
Response.Write xmlHttp.responseText
end if
end if
set xmlHttp = nothing
采集到的内容是一个很短的乱码,但是head却显示content-length有1w多
------解决方案--------------------噢,你这个是responseText的问题,.responseText方法把返回的源码转化成了UTF-8编码 而源页面时GB2312的,自然会错
一般用responseBody直接返回二进制流,再用ADODB.Stream对象把流对象转化为GB2312
网上这方面资料很多,我随便百度了个给你提示下
http://blog.sina.com.cn/s/blog_48c1f4d0010003jy.html
------解决方案--------------------
原来是gzip压缩的。
不知道有没有可以直接处理的函数。
不过,貌似网上有提到说可以先存为zip文件,再调用控件来解压。
------解决方案--------------------这是我用的,没问题。
rContent=getHTTPPage(rUrl,"gb2312")
function getHTTPPage(url,cset)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then exit function
getHTTPPage=bytesToBSTR(Http.responseBody,cset)
set http=nothing
if err.number<>0 then err.Clear
end function
'读URL内容_2/2
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