2012-10-23 91 views
1

我與WebHarvest合作,從需要在登錄一個網站抓取數據WebHarvest找不到響應頭

它的設置是這樣的:

1 =登錄頁面

頁2 =登錄驗證頁面

第3頁=統計頁面

在第2頁設置cookie。當監控第2頁與螢火蟲開我得到這些標題:

Connection Keep-Alive 
Content-Type text/html; charset=UTF-8 
Date Tue, 23 Oct 2012 18:25:12 GMT 
Keep-Alive timeout=15, max=100 
Server Apache/2.0.64 (Win32) JRun/4.0 SVN/1.3.2 DAV/2 
Set-Cookie SESSION=hej123;expires=Thu, 16-Oct-2042 18:25:12 GMT;path=/ 
Transfer-Encoding chunked 

調用同一個頁面WebHarvest我只得到這些頭時:

Date=Tue, 23 Oct 2012 18:31:51 GMT 
Server=Apache/2.0.64 (Win32) JRun/4.0 SVN/1.3.2 DAV/2 
Transfer-Encoding=chunked 
Content-Type=text/html; charset=UTF-8 

看來,三個頭(設置Cookie ,Connection和Keep-Alive)都沒有被WebHarvest找到。第1頁,第2頁和第3頁是dummys,所以沒有進行實際驗證。該Cookie總是在服務器端設置頁面2.

這裏是WebHarvest代碼我目前正在使用:

<var-def name="content2"> 
<html-to-xml> 
<http method="post" url="http://myurl.com/page2.cfm"> 
    <http-param name="Login">sigge</http-param> 
    <http-param name="Password">hej123</http-param> 
    <http-param name="doLogin">Logga in</http-param> 
    <loop item="currField"> 
     <list> 
      <var name="ctxtNewInputs" /> 
     </list> 
     <body> 
      <script><![CDATA[ 
       item = (NvPair) currField.getWrappedObject(); 
       SetContextVar("itemName", item.name); 
       SetContextVar("itemValue", item.value); 
      ]]></script> 
      <http-param name="${item.name}"><var name="itemValue" /></http-param> 
     </body> 
    </loop> 
    <script><![CDATA[ 
     String keys=""; 
     for(int i=0;i<http.headers.length;i++) { 
      keys+=(http.headers[i].key + "=" + http.headers[i].value +"\n---\n"); 
     } 
     SetContextVar("myCookie", keys); 
    ]]></script> 
    <file action="write" path="c:/kaka.txt"> 
     <var name="myCookie"/> 
    </file>   
</http> 
</html-to-xml> 
</var-def> 

編輯:檢查時,我注意到該cookie在WebHarvest設置,即使 無法以編程方式找到http標頭。是否有可能使用某些響應標頭?

有沒有人知道解決這個問題?

謝謝你,最好的問候, SiggeLund

回答

1

得到HTTP頭值到用戶定義的變量範圍的整個配置的方法如下:

<http url="your.url.here" method="GET"> 
    <!--Any settings you apply for the POST/GET call--> 
</http> 
<!--Now you've got your http object you are going to get header value from --> 
<!--At it simplest the acquisition of value goes like the below--> 
<var-def name="fifth_header_val"> 
     <script return="http.headers[5].value"/> 
</var-def> 

以上只是給線索。您可以遍歷http.headers索引並收集您特定任務所需的鍵和值。