PHP cURL 表单数据:多个变量,同名,差异。价值观
Posted
技术标签:
【中文标题】PHP cURL 表单数据:多个变量,同名,差异。价值观【英文标题】:PHP cURL Form data: Multiple variables, same name, diff. values 【发布时间】:2011-08-02 13:40:37 【问题描述】:我正在使用 php cUrl 来查询表单。它执行 POST 查询,所以我使用的是关联数组。这是表单的样子:
<form action="form.php" method="POST">
...
<input type="hidden" name="var" value="value1">
<input type="hidden" name="var" value="value2">
<input type="hidden" name="var" value="value3">
<input type="hidden" name="var" value="value4">
<input type="hidden" name="var" value="value5">
...
</form>
在进行 cUrl 查询时,我有以下代码:
$postfields = array();
$postfields ["var"] = "value1";
$postfields ["var"] = "value2";
$postfields ["var"] = "value3";
$postfields ["var"] = "value4";
$postfields ["var"] = "value5";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (Khtml, like Gecko) Chrome/10.0.648.204 Safari/534.16");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$result = curl_exec ($ch);
curl_close ($ch);
很明显,在这种情况下,PHP 会覆盖前面的 4 个“var”赋值,并且只有 value5 作为参数传递,并且我收到一个错误,提示我缺少 value1..value4。我尝试将“var”设为一个数组,但这也会提示我一个错误。
我是否忽略了什么? 谢谢
【问题讨论】:
【参考方案1】:第一个问题是表单。当它应该是method =“POST”时,你有type =“POST”。通过在 name 属性中使用 [],您的隐藏字段也应该是一个数组。请尝试以下方法:
<?php
if (isset($_POST['submit']))
var_dump($_POST);
?>
<form action="" method="POST">
...
<input type="hidden" name="var[]" value="value1">
<input type="hidden" name="var[]" value="value2">
<input type="hidden" name="var[]" value="value3">
<input type="hidden" name="var[]" value="value4">
<input type="hidden" name="var[]" value="value5">
<input type="submit" name="submit" value="submit">
...
</form>
如果你运行它,你会看到这些值现在在一个数组中。要在 CURL 请求中复制它,您可以:
$postfields = array();
...
$postfields["var"][] = "value1";
$postfields["var"][] = "value2";
$postfields["var"][] = "value3";
$postfields["var"][] = "value4";
$postfields["var"][] = "value5";
【讨论】:
抱歉,写这篇文章的时候打错了。我无法控制表单的字段以及它们的定义方式(我知道它们应该被定义为一个数组)。有趣的是,当我通过浏览器执行代码时,它可以完美运行。 请提供你的完整 curl 代码,我看看有没有问题。以上是关于PHP cURL 表单数据:多个变量,同名,差异。价值观的主要内容,如果未能解决你的问题,请参考以下文章
通过 AJAX 提交多个具有相同名称的 HTML 表单 [重复]
PHP curl 模拟表单数据流multipart/form-data上传文件