2012-12-07 260 views
2

我想登錄到一個網站使用cURL我已經閱讀了很多在這個網站上的答案,仍然無法得到它。請誰能幫我想想辦法PHP使用cURL登錄一個網站

$url = 'https://secure.chess.com/login'; 

$postfields = "c1=USERNAME&loginpassword=PASSWORD&rememberme="; 

$cookie = "cookie.txt"; 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
$response = curl_exec($ch); 

echo $response; 
+0

粘貼代碼,任何錯誤,'curl_info'堆放等問題是太渺小了,甚至開始嘗試。 – soulseekah

+0

這應該工作http://stackoverflow.com/questions/8872071/php-curl-seems-to-be-ignoring-cookie-jar-file – user1527484

回答

1

你似乎缺少了許多崗位的變量,其中要獲取其中有一個重要的國家哈希發佈前:

c1:USERNAME 
loginpassword:PASSWORD 
Qform__FormControl:btnLogin 
Qform__FormEvent:QClickEvent 
Qform__FormParameter: 
Qform__FormCallType:Server 
Qform__FormUpdates: 
Qform__FormCheckableControls:rememberme 
Qform__FormState:9661e98ced2596072a3ca5d70cd57ff5 
Qform__FormId:LoginForm 

不正確的Qform_FormState完全不會產生錯誤消息,這證明是令人困惑的。您必須首先獲取頁面,從HTML中剔除Qform_FormState散列並將其一併提交。還有一個偶爾的c4 CAPTCHA字段。

我能做到這一點不無事生非:

curl https://secure.chess.com/login -v | grep -Po '(?<=Qform__FormState" value=").*(?=")' 
# 9b6b7d849c1d4fa16ed25b7b886cf88b 
# note Set-Cookie: PHPSESSID=vvtk4stb22e34ac7jhg7m6i142; path=/; domain=.chess.com 

curl \ 
    --header "Cookie: PHPSESSID=vvtk4stb22e34ac7jhg7m6i142" \ 
    --data="c1=USERNAME&loginpassword=PASSWORD... *snip* ...&Qform__FormState=9b6b7d849c1d4fa16ed25b7b886cf88b ..." \ 
    https://secure.chess.com/login -v 
+0

所以我很想念形式的信息?那麼,我將如何實現你在PHP中的作用? –

+0

你的確是;我剛剛回答你的問題,爲什麼你不工作。根據上面的信息,確保你提供了所有的表單字段,並且獲得'FormState'的權限(首先從'GET'中提取,例如使用'SimpleXML')。 – soulseekah