【问题标题】:How can scrape website via PHP that requires POST data?如何通过需要 POST 数据的 PHP 抓取网站?
【发布时间】:2012-02-05 04:55:29
【问题描述】:

我正在尝试抓取一个接收 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 字段/值以及如何将它们构造成我传递到那里的变量。

任何帮助将不胜感激!

【问题讨论】:

  • 这就是他们制作 SEO 网址的原因,因为搜索引擎不会索引需要发布/获取数据才能获取页面的页面。您需要考虑所有可能的值组合以获得正确的页面,或者在抓取时获得大量 404。你为什么要使用 POST?如果您正在尝试搜索页面,请尝试使用 GET。

标签: php post curl scrape


【解决方案1】:

如果它是一个简单的表单,那么只需提取所有表单字段并将它们复制到您的脚本中。如果它是某种动态形式,比如 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);

【讨论】:

  • 完美运行。这应该是公认的答案。
猜你喜欢
  • 2020-12-07
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
相关资源
最近更新 更多