2010-10-05 64 views
1

我想從我是phpBB論壇的成員中抓取一些數據。但爲此,需要登錄。我可以使用cURL登錄,但如果我在使用cURL登錄後嘗試抓取數據,它仍然顯示我需要在查看該頁面之前登錄。是否可以使用cURL登錄並保留該會話以進行更遠距離的工作?獲取phpBB遠程會話

另一件事,該論壇通常會在登錄後顯示確認頁面,然後在5秒後自動重定向到索引頁面。事情是,如果我使用cURL登錄,我的腳本也會跟隨該標題位置並向我顯示該頁面。

任何解決方法?

回答

2

這就是平時對我的作品


$timeout=5; 
$file='cookies.jar'; 
$this->handle=curl_init(''); 
curl_setopt($this->handle, CURLOPT_COOKIEFILE, $file); 
curl_setopt($this->handle, CURLOPT_COOKIEJAR, $file); 
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($this->handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)"); 
curl_setopt($this->handle, CURLOPT_TIMEOUT, round($timeout,0)); 
curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, round($timeout,0)); 

和我一般使用這樣


$now=grab_first_page(); 
if(not_logged_in($now)) { 
    send_login_info(); 
} 
if(not_logged_in()) { end_of_script_with_error(); } 
// rest of script 

這樣的餅乾保持跨會話和腳本沒有登錄每次它做了一些事情。

--- explian下面----使用

林的對象,但你可以替換$這個 - >用名爲$ mycurl一個簡單的變量處理,線條會像


$mycurl=curl_init('' 
curl_setopt($mycurl, CURLOPT_COOKIEFILE, $file)

下面的代碼是: - 初始化「捲曲實例」(保持簡單)(第3行) - 第4行和第5行:將cookie保存到文件。 Curl就像瀏覽器一樣工作,所以當你使用curl登錄到頁面時,它會將cookies和認證數據保存在內存中。我告訴它將其保存到一個文件,以便第二次運行該腳本時,它將具有相同的cookie,並且不需要再次進行身份驗證。或者你可以有多個腳本使用同一個cookie文件,只有一個用於登錄,你每24小時運行一次或者每當你註銷時... - 其他設置: * followlocation - 當curl收到http重定向時它應該返回頁面就被重定向到,而不是重定向代碼 *用戶代理 - 捲曲呈現爲火狐 *超時 - 它應該多少時間等待連接建立,5或10是綽綽有餘通常

更多我已經把我在這裏使用的一個簡單的課程http://pastebin.com/Rfpc103X

你可以像這樣使用



// -- initialize curl 
$ec=new easyCurl; 

// -- set some options 
//if the file you are in right now is named file_a.php it will create a file_a.jar cookie file 
$ec->start(str_replace('.php','.jar',__FILE__)); 
$ec->headersPrepare(false); 
$ec->prepareTimeOut(20); 

$url='http://www.google.com/'; 

// --- set url 
$ec->curlPrepare($url); 

// --- get the actual data 
$page=$ec->grab(); 

echo $page; 

// to send GET data 
$get_data=array('id'=>10); 
$ec->curlPrepare($url,$get_data); 

// and to post data 
$post_data=array('user'=>'blue','password'=>'black'); 
$ec->curlPrepare($url,array(),$post_data); 

它自動處理POST/GET和我通常遇到的其他選項的設置。我希望上面的例子對你有用。祝你好運。

+0

Thanx的答覆,但你能解釋他們嗎?你在做什麼使用cookies.jar文件?我認爲你正在爲第二個腳本使用一些框架。是嗎? – 2010-10-05 15:00:02

+0

在第一篇文章中解釋了一些信息,添加了一個簡單易用的類。如果您有更多問題,請隨時提問。通常有什麼幫助,每次你抓取一個文件,以txt格式保存到硬盤中,並看看你得到了什麼樣的反應。 – 2010-10-06 17:14:38

+0

非常感謝您的解釋。我會馬上嘗試。 :) – 2010-10-06 18:00:52

0

是的,你必須保存餅乾。爲此,您可以在登錄時創建一個cookie jar,以便在您稍後訪問論壇時重複使用。

curl --cookie-jar cjar -d "somelogindata" http://example.com/phpbb/login.php 

,創建一個cjar的cookie jar文件,然後您可以在後續請求重用:

curl --cookie-jar cjar --cookie cjar http://example.com/phpbb/viewforum.php?foobar 

--cookie-jar選項指定的cookie被保存在一個文件;要使用它們,請使用--cookie選項。要更新cookie,您應該始終提供--cookie-jar選項。