我总是使用PHP Simple HTML DOM Parser制作网页抓取脚本,但这次我需要使用cURL,因为表单使用POST而且我不知道为什么我的脚本不起作用。
我正在使用Burp Proxy获取所有POST信息。
我想使用cURL进行查询。
这是功能,我将以http://flyfirstnation.com为例:
<?php
function curl_get_contents($url)
{
$curl_moteur = curl_init();
curl_setopt($curl_moteur, CURLOPT_URL, $url);
curl_setopt($curl_moteur, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl_moteur, CURLOPT_POST, true);
curl_setopt ($curl_moteur, CURLOPT_POSTFIELDS, '{"FormData":{"Origin":["LOS"],"VarsSessionID":"","Destination":["ABV"],"DepartureDate":["24-Jan-2014"],"ReturnDate":["28-Jan-2014","28-Jan-2014"],"Adults":"1","Children":"0","Seniors":0,"Students":0,"Infants":"0","Youths":0,"Teachers":0,"SeatedInfants":0,"EVoucher":"","SearchUser":"PUBLIC"},"IsMMBChangeFlightMode":false}');
curl_setopt($curl_moteur,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($curl_moteur, CURLOPT_FOLLOWLOCATION, 1);
$web = curl_exec($curl_moteur);
curl_close($curl_moteur);
return $web;
}
echo curl_get_contents('reservations.flyfirstnation.com');
?>
这是我收到的错误消息:
无法显示页面
由于无效,无法显示您要查找的页面 方法(HTTP动词)用于尝试访问。请试试 以下内容:
如果您认为此请求,请与网站管理员联系 应该被允许。确保显示的网站地址 您的浏览器的地址栏拼写和格式正确。 HTTP错误405 - 用于访问此页面的HTTP谓词不是 允许。 Internet信息服务(IIS)
技术信息(支持人员)
转到Microsoft产品支持服务并执行标题搜索 对于单词HTTP和405.打开IIS帮助,可以在IIS中访问 管理器(inetmgr),并搜索标题为“设置应用程序”的主题 映射,使用网站权限保护您的站点,以及关于 自定义错误消息。
答案 0 :(得分:2)
它似乎是CURLOPT_POSTFIELDS值中的一个问题,它必须是一个键值PHP数组,如下所示:
$postFields = array(
"FormData" => array(
"Origin" => array(
...
)
)
);
答案 1 :(得分:0)
您在POST操作期间发布JSON数据。您需要使用HTTP标头指定它。
curl_setopt($curl_moteur, CURLOPT_HTTPHEADER, array("Content-Type: application/json") );
答案 2 :(得分:0)
如果您使用GET转到reservations.flyfirstnation.com
(例如在浏览器中),您会立即重定向到使用http://reservations.flyfirstnation.com/VARS/Public/FlightSelect.aspx
将其数据发布到的网站。您尝试POST reservations.flyfirstnation.com
,这是不允许的(HTTP错误405)。
如果您按照这样发布数据,它将起作用:
echo curl_get_contents('http://reservations.flyfirstnation.com/VARS/Public/FlightSelect.aspx');
我尝试了它,它有效(也就是说,我得到一个HTML文档,不知道它是否正确)。