如何通过需要POST数据的PHP抓取网站?

时间:2012-01-08 03:29:03

标签: php post curl scrape

我正在尝试抓取一个接收POST数据的网站以返回正确的页面(没有POST它返回15个结果,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”的空间,我只是不知道在哪里挖掘post字段/值以及如何将它们组织成我传入其中的变量。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

如果它是一个简单的表单,那么只需提取所有表单字段并在脚本中复制它们。如果它是一些动态形式,比如javascript构建请求和使用ajax,那么你可以使用开发人员工具(例如Firefox的Firebug Net选项卡,HTTPfox等)来嗅探数据,并在发送后提取帖子数据。

无论哪种方式,一旦你知道发送了哪些字段/数据,其余的应该(相对)容易复制/构建。

答案 1 :(得分: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);