我正在尝试编写一个自动填写表单的脚本,然后自动按下提交按钮。
我已经读过你可以使用curl发布HTTP请求,但是当表单用JavaScript处理post请求时你会怎么做,比如下面的代码?
<form name="myform" action="javascript:void(0)" method="POST" onsubmit="return fancy_function(this)">
答案 0 :(得分:2)
根据您对上述评论的回答,您要做的不是使用curl“填写表单”,而是将完成的表单发布到表单通常发送到的同一页面。
这也称为跨站点发布,许多开发人员专门测试并且不允许它提高安全性。如果表单有验证码,这也会更加困难。
假设它仍然有意义(我之前使用过这种技术的简报注册表格),这就是你想要做的事情:
要获取表单的操作网址,您需要查看网站的Javascript代码并找到funcy_function()的定义位置。然后在函数体中,您可能会看到目标网址。您还需要在html中注明表单变量的具体名称。您需要使用完全相同的名称设置变量。然后你的卷曲设置将如下所示:
$url = 'http://www.targeturl.com';
$myvars = 'myvar1=' . $myvar1 . '&myvar2=' . $myvar2;
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec( $ch );
这会将post变量发送到指定的url,模仿表单中通常会发生的情况。如果你想解析或使用它,页面返回的html将在$ response中。