使用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)
的结果,以查看出了什么问题。