2013-05-18 103 views
0

我想自動填寫html表單並提交表單並顯示結果。我用下面的代碼從here得到。如何自動填充並提交html表單並使用curl

<?php 
//create array of data to be posted 
$post_data['email'] = 'myemail'; 
$post_data['pass'] = 'mypassword'; 

//traverse array and prepare data for posting (key1=value1) 
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 

//create the final string to be posted using implode() 
$post_string = implode ('&', $post_items); 

//create cURL connection 
$curl_connection = 
    curl_init('http://m.facebook.com/'); 

//set options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

//set data to be posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 
//perform our request 
$result = curl_exec($curl_connection); 

print $result; 
//show information regarding the request 
echo curl_errno($curl_connection) . '-' . 
       curl_error($curl_connection); 

//close the connection 
curl_close($curl_connection); 
?> 

我用Facebook手機網站和gmail來測試這段代碼。

我把這些網站的登錄頁面的URL放在curl_init函數中,將登錄頁面的用戶名和密碼字段的名稱屬性的值賦給$ post_data數組的鍵值,並將此代碼保存爲my.php文件並放置它在本地計算機的xampp htdocs目錄中。

當我瀏覽my.php時,它顯示用戶名字段的登錄頁面已填充且密碼字段未填充。根據代碼,預期的結果是,它應該返回成功記錄的頁面,因爲我提供了正確的用戶名和密碼。也curl_errno返回0.這意味着沒有發生錯誤。那爲什麼我不能得到預期的結果?以及爲什麼密碼字段未填寫,但用戶名字段已填寫?

回答

1

檢查代碼http://m.facebook.com/我看到有一些隱藏的字段,您可能(應該)嘗試發送。通常那些是爲了防止自動POST。

首先得到http://m.facebook.com/並使用一些DOM解析器獲取隱藏字段並構建查詢以將它們發佈到動作url。

+0

感謝您的回答。你可以通過展示如何用這些隱藏字段來構建查詢來擴展答案。在上面的代碼中,我使用了post_data數組來保留用戶名和密碼字段的值。但那些隱藏的領域已經有價值。構建查詢時應該使用什麼值?我看到自動完成是關閉這些隱藏的領域。那我可以用查詢填充它們嗎? – lakshman

相關問題