在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認識你自己!

          像丁香花一樣靜靜的等待

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            21 隨筆 :: 2 文章 :: 32 評論 :: 0 Trackbacks
          XMLHTTP應用參考
          一、使用步驟:
          1、創建XMLHTTP對象 //需MSXML4.0支持
          2、打開與服務端的連接,同時定義指令發送方式,服務網頁(URL)和請求權限等。客戶端通過Open命令打開與服務端的服務網頁的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務端的服務網頁。
          3、發送指令。
          4、等待并接收服務端返回的處理結果。
          5、釋放XMLHTTP對象

          二、XMLHTTP方法:
          1、XMLHTTP對象
          備注:客戶機可以使用XMLHTTP對象發送任意的HTTP請求,接受HTTP應答,還可以對應答的XML文檔進行解析。

          Open方法:初始化一個Msxml2.XMLHTTP請求,指定HTTP請求方式、URL以及鑒定信息。
          Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
          bstrMethod: 數據傳送方式,即GET或POST。
          bstrUrl: 服務網頁的URL。
          varAsync: 是否同步執行。缺省為True,即同步執行,但只能在DOM中實施同步執行。用中一般將其置為False,即異步執行。
          bstrUser: 用戶名,可省略。
          bstrPassword:用戶口令,可省略。

          Send方法:發送HTTP請求到服務器,返回應答。
          語法:
          oXMLHttpRequest.send(varBody)
          說明:此方法是否同步取決于Open方法的varAsync參數。如果設為True則為同步,調用立刻返回,如果設為False調用直到整個應答被接收了才返回。

          setRequestHeader( bstrHeader, bstrvalue )
          bstrHeader:HTTP 頭(header)
          bstrvalue: HTTP 頭(header)的值

          如果Open方法定義為POST,可以定義表單方式上傳:
          xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")

          三、XMLHTTP屬性:
          onreadystatechange:在同步執行方式下獲得返回結果的事件句柄。只能在DOM中調用。
          responseBody: 結果返回為無符號整數數組。
          responseStream: 結果返回為IStream流。
          responseText : 結果返回為字符串。
          responseXML: 結果返回為XML格式數據。

          四、示例:
          代碼片段
          < script language="javascript" > 
          function getDatal(url){ 
          var xmlhttp  = new ActiveXObject("MSXML2.XMLHTTP.4.0";//創建XMLHTTPRequest對象,需MSXML4.0支 持 ["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"] 
          xmlhttp.open("GET",url,false,"",""; //使用HTTP GET初始化HTTP請求 
          xmlhttp.send(""; //發送HTTP請求并獲取HTTP響應 
          return xmlhttp.responseXML; //獲取XML文檔 

          < /script > 

            現在網上流行的小偷程序比較多,有新聞類小偷,音樂小偷,下載小偷,那么它們是如何做的呢,下面我來做個簡單介紹,希望對各位站長有所幫助。

          (一)原理
            小偷程序實際上是通過了XML中的XMLHTTP組件調用其它網站上的網頁。比如新聞小偷程序,很多都是調用了sina的 新聞網頁,并且對其中的html進行了一些替換,同時對廣告也進行了過濾。用小偷程序的優點有:無須維護網站,因為小偷程序中的數據來自其他網站,它將隨 著該網站的更新而更新;可以節省服務器資源,一般小偷程序就幾個文件,所有網頁內容都是來自其他網站。缺點有:不穩定,如果目標網站出錯,程序也會出錯, 而且,如果目標網站進行升級維護,那么小偷程序也要進行相應修改;速度,因為是遠程調用,速度和在本地服務器上讀取數據比起來,肯定要慢一些。

          (二)事例

          下面就XMLHTTP在ASP中的應用做個簡單說明

          代碼: 

          代碼片段
          <% 
          ’常用函數 

          ’1、輸入url目標網頁地址,返回值getHTTPPage是目標網頁的html代碼 
          function getHTTPPage(url) 
          dim Http 
          set Http=server.createobject("MSXML2.XMLHTTP" 
          Http.open "GET",url,false 
          Http.send() 
          if Http.readystate<>4 then 
          exit function 
          end if 
          getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312" 
          set http=nothing 
          if err.number<>0 then err.Clear 
          end function 

          ’2、轉換亂瑪,直接用xmlhttp調用有中文字符的網頁得到的將是亂瑪,可以通過adodb.stream組件進行轉換 
          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 

          ’下面試著調用http://www.998w.net/class/的html內容 
          Dim Url,Html 
          Url="http://www.998w.net/class/" 
          Html = getHTTPPage(Url) 
          Response.write Html 
          %>

           ------------------------------------------------------
          代碼:
          '代碼]用XMLHTTP讀取遠程文件

          代碼片段
          <% 
          Response.Buffer = True 
          Dim objXMLHTTP, xml 
          Set xml = Server.CreateObject("Microsoft.XMLHTTP" 

          xml.Open "GET", "http://www.998w.net/down/998w1.0.rar", False 

          xml.Send 

          ’ Add a header to give it a file name: 
          Response.AddHeader "Content-Disposition", _ 
          "attachment;filename=mitchell-pres.zip" 

          ’ Specify the content type to tell the browser what to do: 
          Response.ContentType = "application/zip" 

          ’ Binarywrite the bytes to the browser 
          Response.BinaryWrite xml.responseBody 

          Set xml = Nothing 
          %> 

          -------------------------------------
          如何寫ASP入庫小偷程序
            入庫小偷的原理也很簡單:就是用XMLHTTP遠程讀取網頁的內容,然后根據需要,對讀到的內容進行加工(過濾,替換,分類),最后得到自己需要的數據,加入到數據庫中。
          首先:我們先用XMLHTTP讀取遠程網頁(我的另一片文章中有介紹)。
          其次:對內容進行過濾,這個是比較關鍵的步驟,比如說,我要從遠程網頁上提取出所有url連接,我應該怎么做呢?
          代碼:
          ‘這里用的是正則式

          代碼片段
          Set objRegExp = New Regexp ’建立對象 
          objRegExp.IgnoreCase = True ’大小寫忽略 
          objRegExp.Global = True ’全局為真 
          objRegExp.Pattern = "http://.+?" ’匹配字段 
          set mm=objRegExp.Execute(str) ’執行查找,str為輸入參數 
          For Each Match in mm ’進入循環 
          Response.write(Match.Value) ’輸出url地址 
          next 

          然后,我們需要根據需要做一些替換功能,把不必要的數據替換掉,這個比較簡單,用Replace函數即可。
          最后,進行數據庫操作
          -------------------------------
          一個例子
          代碼:

          代碼片段
          <% 
          On Error Resume Next 
          Server.ScriptTimeOut=9999999 
          Function getHTTPPage(Path) 
          t = GetBody(Path) 
          getHTTPPage=BytesToBstr(t,"GB2312" 
          End function 

          ’ 首先,進行小偷程序的一些初始化設置,以上代碼的作用分別是忽略掉所有非致命性錯誤,把小偷程序的運行超時時間設置得很長(這樣不會出現運行超時的錯 誤),轉換原來默認的UTF-8編碼轉換成GB2312編碼,否則直接用XMLHTTP組件調用有中文字符的網頁得到的將是亂碼。 

          Function GetBody(url) 
          on error resume next 
          Set Retrieval = CreateObject("Microsoft.XMLHTTP" 
          With Retrieval 
          .Open "Get", url, False, "", "" 
          .Send 
          GetBody = .ResponseBody 
          End With 
          Set Retrieval = Nothing 
          End Function 

          ’然后調用XMLHTTP組件創建一個對象并進行初始化設置。 

          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 

          Function Newstring(wstr,strng) 
          Newstring=Instr(lcase(wstr),lcase(strng)) 
          if Newstring<=0 then Newstring=Len(wstr) 
          End Function 

          ’處理抓取回來的數據需要調用adodb.stream組件并進行初始化設置。%> 

          '以下即為頁面顯示部分

          代碼片段
          <% 
          Dim wstr,str,url,start,over,city 
          ’定義一些需要使用到的變量 

          city = Request.QueryString("id") 
          ’程序傳回的ID變量(即用戶選擇的城市)賦給id 

          url="http://appnews.qq.com/cgi-bin/news_qq_search?city="&city&"" 
          ’這里設置需要抓取的頁面地址,當然你也可以直接指定某個地址而不使用變量 

          wstr=getHTTPPage(url) 
          ’獲取指定頁面的全部數據 

          start=Newstring(wstr," <html>") 
          ’這里設置需要處理的數據的頭部,這個變量應視不同情況而設置,具體內容可以通過查看需要抓取的頁面的源代碼來確定。因為在這個程序里我們需要抓取整個頁面,所以設置為頁面全部抓取。注意,設置的內容必須是頁面內容唯一的,不可以重復。 

          over=Newstring(wstr," </HTML>") 
          ’和start相對應的就是需要處理的數據的尾部,同樣的,設置的內容必須是頁面中唯一的。 

          body=mid(wstr,start,over-start) 
          ’設置顯示頁面的范圍 

          ’下面就是動用乾坤挪移大法的時候了,通過replace可以用一些字符替換掉數據中指定的字符。 

          body = replace(body,"skin1","天氣預報 - 斯克網絡") 
          body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id") 

          ’本程序中已經完成了替換的工作,如果有其他需要的話可以繼續進行類似的替換操作。 

          response.write body 
          %>
          posted on 2007-06-14 14:00 dyin 閱讀(522) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 呼和浩特市| 客服| 潮州市| 马尔康县| 淮安市| 邵武市| 泸溪县| 岳池县| 郧西县| 嘉禾县| 罗甸县| 平利县| 修水县| 布尔津县| 澜沧| 巫溪县| 南汇区| 锡林郭勒盟| 山丹县| 湘潭县| 清苑县| 香格里拉县| 阳信县| 普兰县| 贡山| 本溪市| 高邮市| 祁东县| 云南省| 贡觉县| 景泰县| 房山区| 东丽区| 奎屯市| 中卫市| 兴业县| 宣恩县| 青岛市| 阜新| 渑池县| 平谷区|