2011-12-18 143 views
1

這是我在這個論壇上的第一個問題,但它幫助我之前找到答案。所以我想用PHP和CURL自動登錄到我的賬戶。Php CURL自動登錄

我是PHP的新手,但直到現在,無論何時我需要連接到網頁,請發佈帖子或獲取或關注所有工作的重定向。

問題是,我正在嘗試登錄的帳戶有一個用戶名/密碼頁面,後面跟着一個令人難忘的單詞頁面,其中我必須從我難忘的單詞中輸入一些字符。

現在我設法通過第一頁,並獲得第二頁,我必須輸入令人難忘的單詞字符,但是當我試圖做到這一點(所以第二篇文章)不工作 - 我被重定向到登錄再次。

現在我試圖調查,看看有什麼問題,但我仍然不知道爲什麼不工作。我觀察到JSESSIONID是通過服務器在正常登錄時傳遞的,而當我運行我的腳本時,JSESSIONID發生更改。我正在使用:

curl_setopt($this->curl, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($this->curl, CURLOPT_COOKIEJAR, 'cookie.txt'); 

但是,當我檢查文件它是空的,它並沒有被修改,因爲它被創建。是的,該文件可以被寫入(它有777個權限)。

我不知道這是問題還是別的,但我尋找答案,我嘗試了不同的東西,沒有任何工作。所以任何想法將不勝感激。

謝謝

+0

你絕對100%確認你的腳本是從你認爲它的工作目錄運行嗎?仔細檢查['getcwd()'](http://php.net/manual/en/function.getcwd.php),並確保該文件真的可以通過PHP寫入'var_dump(is_writable('cookie.txt 「));'。您還應該執行'curl_setopt($ this-> curl,CURLOPT_HEADER,TRUE);'獲取響應頭並確認您確實收到了一些cookie。 – DaveRandom 2011-12-18 20:54:53

+0

我已經運行您的命令進行測試,如果它是可寫的,它是。它返回true。關於頭文件,我確信當我向服務器發送請求時,會使用一些cookie,因爲我使用的是Firefox中的Live Http Headers插件。文件大小仍爲0 B,並且創建它時修改的最後日期。如果我打印標題,當我做secons發佈時,我得到:Array([0] => HTTP/1.1 302 Found [1] => Set-Cookie:iApply-PROD-COOKIE = R1294003214 – user1104866 2011-12-18 21:35:47

+0

所以@DaveRandom如何當我正常登錄時,JSESSIONID在這裏保持不變,當我做第二次POST時,就像沒有找到它,它會生成一個新的(比如正在創建另一個新請求)。 – user1104866 2011-12-18 21:58:51

回答

0

這裏是一個我可以確認作品的例子。它向您顯示cookieJar文件的完整路徑,並從腳本的執行位置獲取完整路徑,因此它應該適用於大多數操作系統。

<?PHP 
$cookiepath = __DIR__.DIRECTORY_SEPARATOR.'cookieJar.txt'; 
echo "Saving cookies to: $cookiepath\n"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiepath); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiepath); 
curl_setopt($ch, CURLOPT_HEADER ,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$data = curl_exec($ch); 
?>