如何在 CURLOPT_POSTFIELDS 中包含数组数据? [复制]

Posted

技术标签:

【中文标题】如何在 CURLOPT_POSTFIELDS 中包含数组数据? [复制]【英文标题】:How to include array data in CURLOPT_POSTFIELDS? [duplicate] 【发布时间】:2011-07-03 12:58:24 【问题描述】:

我基本上是用 php 处理 html 表单,然后将其发送到其他地方进行存储和处理。但是我无法通过 curl 发送数组列表。我需要这样做,当它到达接收服务器时,就好像它直接来自输入表单一样。

如果我序列化数组,则在使用该函数时不会收到任何错误,但这会使服务器无法读取它们,因此它们需要保持帖子格式就像它们来自 HTML 表单一样。

我使用的是 Kohana,但 Curl 的原理还是一样,这是我的代码:

            $path = "/some/process/path";
            $store = "http://www.website.com";

            $url = $store . $path;

            $screenshots = array();
            $screenshots[0] = 'image1.jpg';
            $screenshots[1] = 'image2.jpg';
            $screenshots[2] = 'image3.jpg';

            $videoLinks = array();
            $videoLinks[0] = 'video1.wmv';
            $videoLinks[1] = 'video2.wmv';

            $params = array(
                'id' => '12',
                'field1' => 'field1text',
                'field2' => 'field2text',
                'field3' => 'field3text',
                'screenshots' => $screenshots,
                'videoLinks' => $videoLinks,
            );

            $options = array(
                CURLOPT_HTTPHEADER => array("Accept: application/json"),
                CURLOPT_TIMEOUT => 30,
                CURLOPT_POST => TRUE,
                CURLOPT_POSTFIELDS => $params,
            );

            $data = Remote::get($url, $options);
            $json = json_decode($data);

干杯。

【问题讨论】:

【参考方案1】:
CURLOPT_POSTFIELDS => http_build_query($params),

http://php.net/manual/en/function.http-build-query.php

【讨论】:

不错的一个...当您知道如何操作时很容易。 ;-)【参考方案2】:

我只是想分享一个 http_build_query() 的替代方法

您可以通过分别提供每个子数组项来将数组输入包含在 CURLOPT_POSTFIELDS 中。

而不是...

$videoLinks = array();
$videoLinks[0] = 'video1.wmv';
$videoLinks[1] = 'video2.wmv';

$params = array(
    ...
    'videoLinks' => $videoLinks;
    ...
);

...这样做...

$params = array(
    ...
    'videoLinks[0]' => 'video1.wmv';
    'videoLinks[1]' => 'video2.wmv';
    ...
);

【讨论】:

【参考方案3】:

我是 cURL 及其 PHP 版本的新手,但据我所知,您可以在自己的选项中使用数组,只是不要忘记,如果您要发送字段 => 值的数组,那么您必须将 Content-Type 标头设置为 multipart/form-data 才能正确解释。话虽如此,您的参数数组格式错误。在你的最终数组值之后你有那个额外的逗号。这可能就是让它变得无聊的原因。

【讨论】:

我原以为使用数组可以正常工作,但是当我改用http_build_query 时,我的curl 终于开始工作了。 ***.com/a/5104620/470749

以上是关于如何在 CURLOPT_POSTFIELDS 中包含数组数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

CURLOPT_POSTFIELDS 的 curl POST 格式

php 通过curl传递的json数据如何获取

PHP 5.6 如何使用 CURL 上传文件

隐藏paypal中的送货地址

如何在 PHP CURL 中从 POST 切换到 GET

如何使用 PHP 序列化数组(数组到查询字符串)