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

问题描述 投票:0回答:2

我正在尝试抓取一个接受 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);

我知道我需要将我的帖子字段放入充满“XXXXXX”的空间中,我只是不知道在哪里挖掘帖子字段/值以及如何将它们构建到我传递到那里的变量中。

任何帮助将不胜感激!

php web-scraping curl post
2个回答
2
投票

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

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


2
投票

我认为有人可能会寻找代码来替换 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);
© www.soinside.com 2019 - 2024. All rights reserved.