2012-01-08 73 views
2

我想抓取一個網站,需要在POST數據返回正確的頁面(sans POST它返回15個結果,POST數據它返回所有結果)。如何通過PHP來抓取需要POST數據的網站?

目前我的代碼看起來像這樣:

$curl = curl_init(); 
curl_setopt($curl,CURLOPT_URL,"http://www.thisismyurl.com/awesome"); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, XXXXXX); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result= curl_exec($curl); 

我知道,我需要把我的postfields放入盛有「XXXXXX」的空間,我只是不知道從哪裏挖出後場/值以及如何將它們組織到我傳入的變量中。

任何幫助將不勝感激!

+0

這就是爲什麼他們使SEO搜索引擎優化搜索引擎不索引需要發佈/獲取數據獲取頁面的頁面。你需要考慮各種可能的價值組合,以獲得正確的頁面,或者在刮擦時獲得大量的404值。你爲什麼使用POST?如果您正在嘗試搜索頁面,請嘗試使用GET。 – Joseph 2012-01-08 03:52:10

回答

2

如果它是一個簡單的形式,那麼只需提取所有表單字段並將其複製到腳本中。如果它是一些動態表單,比如javascript構建請求並使用ajax,那麼您可以使用開發人員工具(例如Firefox的Firebug Net選項卡,HTTPfox等)嗅探數據,並在發送後發佈數據。無論哪種方式,一旦你知道發送了什麼字段/數據,其餘的應該(相對)容易複製/構建。

+0

Hazaa!經過幾次不成功的嘗試後,它似乎正在工作。謝謝! – OldDrunkenSailor 2012-01-08 03:59:07

1

我認爲有人可能會尋找代碼來取代XXXXXX。我使用下面的一段代碼。

$ch = curl_init(); 
$timeout=5; 
$name=$_REQUEST['name']; 
$pass=$_REQUEST['pass']; 
$data = array('username' => '$name', 'password' => '$pass'); 
$data=http_build_query($data); 
curl_setopt($ch,CURLOPT_URL,"superawsomesite.com"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
$data = curl_exec($ch); 
curl_close($ch); 
+0

完美的作品。這應該是被接受的答案。 – 2016-12-19 20:17:35