PHP爬虫,用于从外部站点提交并获取结果

PHP爬虫,用于从外部站点提交并获取结果,php,html,forms,web-crawler,Php,Html,Forms,Web Crawler,对于我正在开发的系统,我需要以编程方式转到特定页面。在表单中填写一个字段(我知道输入元素的id和名称),提交并存储结果 我确实有权在我获取信息的网站上这样做 我遇到的问题是,我相信脚本是有效的,但因为外部表单的“操作”是重定向到同一个页面,并在表中显示结果,它只是尝试将我的个人网页重定向到同一个目录,当然,我的服务器上不存在这个目录 非常感谢您的帮助,以下是我目前所拥有的: //extract data from the post extract($_POST); //set POST var

对于我正在开发的系统,我需要以编程方式转到特定页面。在表单中填写一个字段(我知道输入元素的id和名称),提交并存储结果

我确实有权在我获取信息的网站上这样做

我遇到的问题是,我相信脚本是有效的,但因为外部表单的“操作”是重定向到同一个页面,并在表中显示结果,它只是尝试将我的个人网页重定向到同一个目录,当然,我的服务器上不存在这个目录

非常感谢您的帮助,以下是我目前所拥有的:

//extract data from the post
extract($_POST);

//set POST variables

//URL IS SET, I HAVE JUST TOOK IT OUT OF THIS CODE SNIPPET
$urltopost = 'blahblah.com';

$datatopost = array ( 
's_3_2_5_0' => 0130016825566667, 'SWEFo' => 'SWEForm3_0',  'SWEField' => 's_3_1_0_0', 'SWENeedContext' => 'true',
'W' => 't', 'SWECmd' => 'InvokeMethod', 'SWEMethod' => 'SearchForLicence', 'SWESP' => 'false', 'SWEDIC' => 'false',
'SWEReqRowId' => '0','SWEView' => 'LDL+Licence+Query+View','SWEC' => '3','SWEBID' => '1363349905','SWEGHOTO' => 'true',
'SWETS' => '1363349913267', 'SWEApplet' => 'LDL+Query+Licences');

$ch = curl_init ($urltopost);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $datatopost);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$returndata = curl_exec ($ch);

echo $returndata;

表单返回HTML和执行重定向的JavaScript

window.location.replace("/web/start.swe?SWECmd=GotoView&SWEView=LDL+Asset+Query‌​+Results+View&SWERF=1");
在输出$returndata之前,需要将其从$returndata中删除。无论如何,HTML中还有许多其他相对URL,比如图像的URL


您最好只从结果中提取数据,并生成自己的HTML页面(搜索“使用PHP从HTML中提取数据”)。

表单返回带有JavaScript的HTML,JavaScript执行重定向

window.location.replace("/web/start.swe?SWECmd=GotoView&SWEView=LDL+Asset+Query‌​+Results+View&SWERF=1");
在输出$returndata之前,需要将其从$returndata中删除。无论如何,HTML中还有许多其他相对URL,比如图像的URL


您最好只从结果中提取数据并生成自己的HTML页面(搜索“使用PHP从HTML提取数据”)。

Wow!,看起来很酷,就像一个
爬虫/垃圾邮件发送者
或其他什么。。我认为您需要将
$urltopost
更改为表单发送其
请求的位置,而不是表单。从
form
中获取所有字段,并将其发送到
action=www.example.com
@Rafee听起来是个好主意,但表单重定向到同一页面
extract($\u POST)
的作用是什么?尝试将curl\u setopt($ch,CURLOPT\u FOLLOWLOCATION,0)>CURLOPT\u FOLLOWLOCATION设置为true,此选项跟随重定向,可能会有帮助哇!,看起来很酷,就像一个
爬虫/垃圾邮件发送者
或其他什么。。我认为您需要将
$urltopost
更改为表单发送其
请求的位置,而不是表单。从
form
中获取所有字段,并将其发送到
action=www.example.com
@Rafee听起来是个好主意,但表单重定向到同一页面
extract($\u POST)
的作用是什么?尝试将curl\u setopt($ch,CURLOPT\u FOLLOWLOCATION,0)>CURLOPT\u FOLLOWLOCATION设置为true,此选项跟随重定向,可能有帮助$returndata应该是表单返回的数据,有没有办法绕过JS重定向?表单可能会返回一些HTML。你能给我们看看吗?在我们真正知道是否有JS之前,为可能的JS寻找解决方案可能没有意义。-这是表格1)我不知道要填什么,所以我无法得到结果。2) 表单提交到
/web/start.swe
。您的代码中没有此项。我只想输入第一个字段和许可证号。。尝试输入:013001682556667$returndata应该是表单返回的数据,有没有办法绕过JS重定向?表单可能会返回一些HTML。你能给我们看看吗?在我们真正知道是否有JS之前,为可能的JS寻找解决方案可能没有意义。-这是表格1)我不知道要填什么,所以我无法得到结果。2) 表单提交到
/web/start.swe
。您的代码中没有此项。我只想输入第一个字段和许可证号。。尝试输入:013001682556667