2014-06-12 196 views
0

我在這裏有很多希望解決我的問題。我有這個網站我想登錄並訪問一個會員專頁。所以基本上用cURL的php代碼來登錄,然後打開一個成員唯一的頁面。以下是我使用的代碼。但每次我嘗試訪問僅限會員頁面時,它都會要求我登錄。所以它不會在我已經登錄會話或Cookie保存PHP cURL登錄到一個網站

.......... 
set_time_limit(0); 
$username = '[email protected]'; 
$password = 'mypassword'; 
$loginUrl = 'http://radaris.com/login/a.login'; 
$cookie_file_path = getcwd() . '/tmp/cookie.txt'; 


//init curl 
$ch = curl_init(); 

//Set the URL to work with 
curl_setopt($ch, CURLOPT_URL, $loginUrl); 

// ENABLE HTTP POST 
curl_setopt($ch, CURLOPT_POST, 0); 

//Set the post parameters 
curl_setopt($ch, CURLOPT_HEADER, 1); // set to 0 to eliminate header info from response 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'email='.$username.'&password='.$password."&remember_me=1"); 

//Handle cookies for the login 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 

//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL 
//not to print out the results of its query. 
//Instead, it will return the results as a string return value 
//from curl_exec() instead of the usual true/false. 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

//execute the request (the login) 
$store = curl_exec($ch); 

echo "<font color=red>Login</font><br>".$store."<br><br>"; 



$postfields = array(); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://radaris.com/my/'); 
curl_setopt($ch, CURLOPT_HEADER, 1); // set to 0 to eliminate header info from response 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_POST, 1); 
//Handle cookies for the login 
// Edit: prior variable $postFields should be $postfields; 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$result = curl_exec($ch); 


echo "<font color=red>Report</font><br>".$result."<br><br>"; 
.......... 

結果我得到的是:

登錄HTTP/1.1 200 OK服務器:nginx日期:週四,6月12日2014年14點21分01秒 GMT內容類型:應用程序/ JSON傳輸編碼:分塊 連接:保持活躍保持活動:超時= 20的Cache-Control:沒有店面, 無緩存,必重新驗證緩存 - 控制:後檢查= 0,預檢查= 0 到期日:星期三,2009年19:00:00 GMT X-Robots-Tag中1月14日:NOINDEX {「/Rdf.showError":[["Inv alid email or password「,」login_form「],[」檢查 你的電子郵件「,」login_email「],[」檢查你的密碼「,」login_password「]]]

報告HTTP/1.1 302找到服務器:nginx日期:2014年6月12日,星期四 14:21:03 GMT內容類型:text/html; charset = utf-8傳輸編碼: chunked連接:keep-alive Keep-Alive:timeout = 20位置: /login?backurl =%2Fmy%2F HTTP/1.1 200 OK服務器:nginx日期:星期四,12月 Jun 2014 14:21:03 GMT內容類型:text/html; charset = utf-8 Transfer-Encoding:chunked連接:keep-alive Keep-Alive: timeout = 20變化:Accept-Encoding變化:Accept-Encoding Set-Cookie: PHPSESSID = qdg80d48dd17hl879h86v9ruo5;路徑= /;僅Http到期日:星期四, 1981年11月19日8點52分00秒GMT緩存控制:無店鋪,無緩存, 必重新驗證,檢查後= 0,預檢查= 0雜注:無緩存登錄我們 絕不會分享或透露您的信息!

以上所述僅爲頭。在第二個頭文件中,我再次登錄表單登錄,這意味着我的代碼的第一位成功登錄沒有保存會話,這就是爲什麼當我訪問僅成員頁面時,它要求登錄。

我真的非常渴望完成這件事。謝謝大家提前。

回答

0

您使用兩個單獨的捲曲把手,你永遠不成立第二個cookie的東西。每個捲曲手柄都是完全獨立的,所以如果你不告訴第二個手柄關於你在第一個手柄中創建的cookiejar/cookiefile,你永遠不會使用從登錄請求中獲得的cookie。

從技術上講,你不必做每個句柄一個請求。單個句柄可以執行多個請求。唯一可以更容易地開始新的請求的方式是,如果您設置了許多選項來進行復雜的自定義請求,並且更容易開始新鮮事,而不是爲下一個請求重置這些選項。

所以,你的代碼順序應該是:

init curl 
set up cookiefile/cookiefar and other options 
do login request 
do next next request 
close curl 

如果你不想重寫,那麼至少新增cookiejar/cookiefile選項的第二個請求。

+0

它很有意義。但我不知道要使用什麼選項和刪除。你可以通過簡單易用的代碼讓我開始,只需登錄,然後在保持登錄狀態時進入第二個網址。 – user3734397

+0

你能PLZ給我一個例子,從我上面的代碼,讓我開始對你給我的建議代碼: 初始化蜷縮 設立cookiefile/cookiefar和其他選項 做的登錄請求 接下來做下一個請求 接近捲曲 謝謝等待有人幫助我,因爲我很新的捲曲。 – user3734397