使用 curl 提交/检索表单结果
Posted
技术标签:
【中文标题】使用 curl 提交/检索表单结果【英文标题】:Using curl to submit/retrieve a forms results 【发布时间】:2011-06-03 02:45:24 【问题描述】:在尝试使用 curl 将数据发布到页面并在提交表单后检索结果时需要帮助。
我创建了一个简单的表单:
<form name="test" method="post" action="form.php">
<input type="text" name="name" size="40" />
<input type="text" name="comment" size="40" />
<input type="submit" value="submit" />
</form>
另外,我有 php 代码在同一页面中处理此表单。它所做的只是回显表单值。
我一直在使用的卷曲是这样的:
$h = curl_init();
curl_setopt($h, CURLOPT_URL, "path/to/form.php");
curl_setopt($h, CURLOPT_POST, true);
curl_setopt($h, CURLOPT_POSTFIELDS, array(
'name' => 'yes',
'comment' => 'no'
));
curl_setopt($h, CURLOPT_HEADER, false);
curl_setopt($h, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($h);
echo $result;
当我启动包含 curl 代码的页面时,我得到了 form.php 页面内容,但它没有显示 提交表单时 PHP 应该回显的变量。
希望有任何帮助。
谢谢。
【问题讨论】:
我们能看到处理表单提交的 PHP 吗?问题可能就在那里。 另外,您是否验证过手动提交表单会产生所需的输出? 手动提交表单会产生正确的输出。处理表单的 PHP 是: if(isset($_POST['submitted']))echo $_POST[name] ..... etc. 就是这样 【参考方案1】:AHHHH 在您发表评论后,问题很明显。
您需要在数组中再包含一个 POST 变量。
'submitted' => 'submitted'
如果单击,提交按钮还会返回一个 post 值,您正在处理 PHP 的表单中检查该值。
if ($_POST['submitted'])
在您的 curl 代码中,但是您遗漏了“提交”后的变量。
如果这是您要查找的内容,请选中此答案旁边的复选标记。谢谢!
【讨论】:
【参考方案2】:通过阅读其他两个答案以及 OP 的评论,我有几个想法。
具体来说,OP 评论是:
手动提交表单确实会产生正确的输出。处理表单的 PHP 是: if(isset($_POST['submitted']))echo $_POST[name] ..... etc. 就是这样
在标准条件下,如原始问题中所述,您的基本表单将生成一个 $_POST 数组,如下所示:
array(
'name' => 'The Name as Entered in the Form' ,
'comment' => 'The Comment as Entered in the Form' ,
'submit' => 'submit' # From the "Submit" button
);
您的评论表明您的表单处理程序的某些方面正在寻找名为“已提交”的 $_POST 元素。
1) 如问题中所述,基本形式将始终返回 FALSE 以检查 $_POST['submitted'],因此,将触发该条件的 ELSE 操作(如果存在)。
2) 您的 CURL 操作没有设置“提交”或“已提交”,并且对于条件始终返回 FALSE。
所以,我建议你:
1) 检查您的表单处理程序,查看哪些字段是必不可少的,它们的名称是什么以及它们的内容应该是什么。
2) 检查您的基本表单,并确保它具有适当的字段。
3) 检查您的 CURL 操作,并确保它详细说明了每个必填字段。 (简单的检查是在表单处理程序的顶部插入print_r( $_POST );die();
并提交基本表单。这将准确显示表单正在发送的内容,因此您可以在 CURL 中重新创建它。
【讨论】:
感谢您的彻底检查,这正是问题所在。以上是关于使用 curl 提交/检索表单结果的主要内容,如果未能解决你的问题,请参考以下文章
CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)