DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 偷也是門技術——淺談XMLHTTP應用:新聞小偷
偷也是門技術——淺談XMLHTTP應用:新聞小偷
編輯:AJAX詳解     

本文參考互聯網整理而成(在此感謝資料奉獻者)。希望本文盡量系統,盡量易懂。

偷,即無勞而獲。在網絡上,諸如某大型權威站點發布了新聞,而自己的小小站點也想與時俱進,和人家一樣同步更新,多N啊。於是,偷就是最好的辦法了。偷是不道德的,不鼓勵偷,但又不提倡不偷,都是技術惹的禍,扯遠了~!

小偷程序是什麼?

其實是通過XML中的XMLHTTP對象調用其它網站上的網頁,甚至可以將接受的Html代碼進行過濾以獲得需要內容(比如提取某某氣象站,不可能是將整站提取顯示,而只是需要顯示天氣的那部分)。

其實就是一個寄生蟲嘛,適合該網站的小偷程序已經唯一確定了,則只要該站點不改版替換相關主要內容,則永遠偷下去。否則,就需要相應的修改小偷程序了。btw,在小胖的PUBCMS中已定義為爬蟲,我想意思也差不多了:P

那麼如何偷呢?看過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函數返回字符就可以了。

應用則如下:


<%
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 FunctionFunction BytesToBstr(body)dim objstreamset 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.Closeset obJStream = nothingEnd FunctionDim Url,HtmlUrl = "http://www.cnbruce.com/blog"Html = getHTTPPage(Url)response.write(Html)%> [Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]

這樣一個頁就被“偷”下來了。同時,注意到返回的信息中,有的圖片不能顯示,樣式也不能連接,如要正常,則需要將返回的信息做過濾和調整。

那麼該如何提取有用的返回信息,做過濾和調整呢?


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved