Try again

200512270453934121.gif

博客园 首页 联系 管理

那么如何偷呢?看过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
%>

 

接着就来看看定义编码函数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 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

 

lenB返回字节数而不是字符数,同理ascB返回每个字节的ascii码,大于80h,也就是128的ascii是汉字——半个汉字,把半个半个的汉字ascii码拼合再用chr函数返回字符就可以了。(进行移位&H100 =256往前移8位)

应用则如下:


<%
Dim Url,Html
Url = "http://www.cnbruce.com/blog"
Html = getHTTPPage(Url)
response.write(Html)
%>

 

即表示对 http://www.cnbruce.com/blog 的内容进行“偷”行为,返回了相关该站的内容。

拷贝下列内容保持为ASP文件进行调试
程序代码: [ 复制代码到剪贴板 ] 
<%
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)'返回信息,同时用函数定义编码
    set objXML=nothing'关闭
    if err.number<>0 then err.Clear
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

Dim Url,Html
Url = "http://www.cnbruce.com/blog"
Html = getHTTPPage(Url)
response.write(Html)
%>

 

这样一个页就被“偷”下来了。同时,注意到返回的信息中,有的图片不能显示,样式也不能连接,如要正常,则需要将返回的信息做过滤和调整。

 

posted on 2006-08-15 18:15  共同学习,共同进步  阅读(497)  评论(0编辑  收藏  举报