使用PHP Curl提交表单并获得结果
网站上的表格是使用PHP Curl提交表单并获得结果,php,forms,post,curl,get,Php,Forms,Post,Curl,Get,网站上的表格是 <form action="" method="POST"> <input style="width:30%;background-color:#e2e2e2;border:#000;color:#000;" type="text" name="userName" placeholder="Enter a username" required=""> <br> <input type="submit" name="userBtn" val
<form action="" method="POST">
<input style="width:30%;background-color:#e2e2e2;border:#000;color:#000;" type="text" name="userName" placeholder="Enter a username" required="">
<br>
<input type="submit" name="userBtn" value="get Username">
</form>
在name=“userName”
中填写值并单击name=“userBtn”
后,页面将刷新并将name=“userName”
的值更改为我想要的信息
如何提交表单,然后检索表单写入的数据?请参阅此详细示例,从创建新连接开始
$curl_connection =
curl_init('http://www.domainname.com/target_url.php');
$result = curl_exec($curl_connection);
curl_close($curl_connection);
使用curl_init()函数创建一个新连接,该函数将目标URL作为参数(我们要发布数据的URL)。目标URL与普通表单的“action”参数相同,如下所示:
<form method="post" action="http://www.domainname.com/target_url.php">
$post_data['firstName'] = 'Name';
$post_data['action'] = 'Register'
我们在这里设置了什么选项
首先,我们将连接超时设置为30秒,这样,如果远程服务器无法响应,脚本就不会无限期地等待
然后我们设置cURL如何向远程服务器标识自己。有些服务器会为不同的浏览器(或代理,如搜索引擎的蜘蛛)返回不同的内容,所以我们希望我们的请求看起来像来自流行的浏览器
CURLOPT_RETURNTRANSFER设置为true将强制cURL不显示请求的输出,而是将其作为字符串返回
然后,我们将CURLOPT_SSL_VERIFYPEER选项设置为false,以便在SSL证书无效、过期或未签名的情况下,请求不会触发错误
最后,我们将CURLOPT_FOLLOWLOCATION设置为1,以指示cURL遵循远程站点发送的头中的“Location:”重定向
现在我们必须准备好要发布的数据。我们可以首先将其存储在数组中,元素的键与常规表单的输入名称相同,值是我们要为该字段发布的值
例如,如果以常规形式,我们将:
<input type="text" name="firstName" value="Name">
<input type="hidden" name="action" value="Register">
对每个表单字段执行相同的操作
数据将以以下格式发布:
键1=值1和键2=值2
为了像这样格式化数据,我们将为每个键值对创建字符串(例如key1=value1),将它们放入另一个数组($post_items),然后使用PHP函数improde()将它们组合成一个字符串
接下来,我们需要告诉cURL我们要发布哪个字符串。为此,我们使用CURLOPT_POSTFIELDS选项
curl_setopt($curl_connection,CURLOPT_POSTFIELDS,$post_string);
最后,我们执行post,然后关闭连接
$curl_connection =
curl_init('http://www.domainname.com/target_url.php');
$result = curl_exec($curl_connection);
curl_close($curl_connection);
现在,数据应该已经发布到远程URL。去检查这个,如果它没有正常工作,使用curl_getinfo()函数查看可能发生的任何错误
print_r(curl_getinfo($curl_connection));
此行显示有关传输的一系列信息。必须在使用curl_close()关闭连接之前使用此选项
您还可以通过输出curl_errno($curl_connection)和curl_error($curl_connection)来查看错误的编号和描述
所以,让我们把一切都放在一起。这是我们的代码:
<?php
//create array of data to be posted
$post_data['firstName'] = 'Name';
$post_data['action'] = 'Register';
//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
$post_items[] = $key . '=' . $value;
}
//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);
//create cURL connection
$curl_connection =
curl_init('http://www.domainname.com/target_url.php');
//set options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
//perform our request
$result = curl_exec($curl_connection);
//show information regarding the request
print_r(curl_getinfo($curl_connection));
echo curl_errno($curl_connection) . '-' .
curl_error($curl_connection);
//close the connection
curl_close($curl_connection);
?>
非常感谢您的帮助,真的!但是,当你说去检查网址,看看它是否张贴,我该怎么做呢?网站返回的数据不会留在那里。我也想知道如何查看@Needhi查询结果Agrawal@DanMossa@user2030942我也这么认为,但只需打印$result
变量,这就是检查数据是否已发布的方式,如果结果是字符串,那么它就是。如果没有发布,您将得到一个false
值,在这种情况下,请检查curl\u getinfo($curl\u connection)
的结果,以查看出了什么问题。