202405月202303月202007月201706月201602月08月201501月05月08月09月11月
201401月03月05月06月07月
09月10月11月201305月08月09月11月12月
201201月02月03月05月201101月02月03月04月05月
06月07月08月09月10月
11月12月201001月02月03月04月05月
06月07月08月09月10月
11月12月200901月02月03月04月05月
06月07月08月09月10月
11月12月200801月02月03月04月05月
06月07月08月09月10月
11月12月200701月02月03月04月05月
06月07月08月09月10月
11月12月200601月02月03月04月05月
06月07月08月09月10月
11月12月200502月04月07月08月09月
10月11月12月
浅谈XMLHTTP应用
作者:jogocun 日期:2006-07-28 22:57
正在载入,请稍候……
通过XML中的XMLHTTP对象调用其它网站上的网页,甚至可以将接受的HTML代码进行过滤以获得需要内容(比如提取某某气象站,不可能是将整站提取显示,而只是需要显示天气的那部分)。
其实就是一个寄生虫嘛,适合该网站的小偷程序已经唯一确定了,则只要该站点不改版替换相关主要内容,则永远偷下去。否则,就需要相应的修改小偷程序了。btw,在小胖的PUBCMS中已定义为爬虫,我想意思也差不多了。
那么如何偷呢?看过XMLHTTP介绍的应该了解些。
先定义了一个函数,解释在函数中:
引用内容
<%
Function getHTTPPage(url)
dim objXML
set objXML=server.createobject("MSXML2.XMLHTTP")'定义
objXML.open "GET",url,false'打开
objXML.send()'发送
If objXML.readystate<>4 then '判断文档是否已经解析完,以做客户端接受返回消息
exit function
End If
getHTTPPage=BytesToBstr(objXML.responseBody)'返回信息,同时用函数定义编码
'getHTTPPage=bytes2BSTR(objXML.responseBody)'或者返回信息时用函数转换汉字
set objXML=nothing'关闭
if err.number<>0 then err.Clear
End Function
%>
Function getHTTPPage(url)
dim objXML
set objXML=server.createobject("MSXML2.XMLHTTP")'定义
objXML.open "GET",url,false'打开
objXML.send()'发送
If objXML.readystate<>4 then '判断文档是否已经解析完,以做客户端接受返回消息
exit function
End If
getHTTPPage=BytesToBstr(objXML.responseBody)'返回信息,同时用函数定义编码
'getHTTPPage=bytes2BSTR(objXML.responseBody)'或者返回信息时用函数转换汉字
set objXML=nothing'关闭
if err.number<>0 then err.Clear
End Function
%>
接着就来看看定义编码函数BytesToBstr()的主要内容
引用内容
<%
Function BytesToBstr(body)
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 = "GB2312"
'转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP调用有中文字符的网页得到的将是乱码
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
%>
Function BytesToBstr(body)
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 = "GB2312"
'转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP调用有中文字符的网页得到的将是乱码
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
%>
当然,还可以使用专门的函数来处理汉字:
引用内容
Function bytes2BSTR(vIn)
strReturn = ""
For j = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,j,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,j+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
j = j + 1
End If
Next
bytes2BSTR = strReturn
End Function
strReturn = ""
For j = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,j,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,j+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
j = j + 1
End If
Next
bytes2BSTR = strReturn
End Function
lenB返回字节数而不是字符数,同理ascB返回每个字节的ascii码,大于80h,也就是128的ascii是汉字——半个汉字,把半个半个的汉字ascii码拼合再用chr函数返回字符就可以了。
应用则如下:
引用内容
点此快速转到评论处,留下您的宝贵见解吧^_^ 本文如需转载,请详细注明出处,尊重版权,尊重别人的劳动成果,谢谢合作哦! |
评论列表 ↓ 点击显示/隐藏0条博友们的评论