2011-08-24 154 views
0

我遇到了問題。 我想用CURL登錄網站,但頁面會生成一個密鑰,該密鑰位於隱藏字段中。所以我必須抓住隱藏領域的價值...之後,我必須提交密碼,電子郵件和抓取密鑰。CURL抓取信息並用它登錄

這可能嗎?

希望你明白

感謝

---- ----編輯如果 的頁面重載,有一個在隱藏字段..和老的一個新的密鑰不工作

+0

在http頭文件中必須有東西來告訴密鑰是否是有效的/過期的,也許你試圖調查它,一旦你有正確的頭部,你可以在手動抓取密鑰或解析後發送請求curl的HTML結果。 – w00d

回答

0

是的。

  1. 將頁面內容加載到變量中(例如$contents = file_get_contents(...);)。
  2. 現在,解析它,以便您可以獲取隱藏的密鑰(例如,$matches = preg_match(..., ...); $key = $matches[1];)。
  3. 現在,使用隱藏的密鑰發佈請求(例如,$context = streamcontextcreate(...); $data = file_get_contents(..., false, $context);)。
3

是的,這是可能的。基本步驟是:

1. Fetch form 
2. Run returned data through DOMdocument to extract the hidden form field's value 
3. Post login data, including the key value from step #2 
4. ??? 
5. Profit 
0

是的,這是可能的。

你甚至可以

$源抓取頁面=用htmlspecialchars(的file_get_contents($網址));

然後用strpos,substr等獲得(這是最簡單的方法)

然後,只需使用此功能張貼

$ urltopost = $網址

該字段的信息

$ datatopost = array($ name => $ value);

$ ch = curl_init($ urltopost);

curl_setopt($ ch,CURLOPT_POST,true);

curl_setopt($ ch,CURLOPT_POSTFIELDS,$ datatopost);

curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true);

$ returndata = htmlspecialchars(curl_exec($ ch));

+0

爲什麼'htmlspecialchars()'?當OP僅需從表單中提取單個值時完全沒有必要。頁面數據不會在任何地方重新顯示。 –

+0

嗯,我總是使用它,因爲那時我無法立刻用立陶宛字母做記號。 – aemdy

+0

在這種情況下應該使用mb_strpos(),它可以識別多個字節並使用UTF字符串。 –