【问题标题】:Why my PHP Curl POST request turns data array into string?为什么我的 PHP Curl POST 请求将数据数组转换为字符串?
【发布时间】:2017-11-14 15:48:42
【问题描述】:

我正在尝试使用 POST 方法将一些数据发送到给定的 API。 我编写了一个函数来执行我项目中的任何 CURL 请求。 当我将它与值为数组的参数一起使用时,该数组会自动转换为字符串“Array”。

示例: 这是我的功能:

function callAPI($method, $url, $data = false)
    {
        $curl = curl_init();
        // First var_dump()
        var_dump($data);

        switch ($method)
        {
            case "POST":
                curl_setopt($curl, CURLOPT_POST, 1);
                if ($data) {
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                    // Second var_dump()
                    var_dump($data);
                }
                break;
            case "PUT":
                curl_setopt($curl, CURLOPT_PUT, 1);
                break;
            default:
                if ($data)
                    $url = sprintf("%s?%s", $url, http_build_query($data));
        }

        $headers = array();
        $headers[] = 'Accept: application/json';
        $headers[] = 'Content-Type: application/json';

        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);


        $auth = "username:pwd";
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($curl, CURLOPT_USERPWD, $auth);
        curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);

        ....
    }

这是我的函数的一个用例:

$values = array(
    "param1" => "value1",
    "param2" => "value2",
    "param3" => "value3",
     ...
    "param10" => array("23"),
);


callAPI('POST', "https://myapi", $values);

第一个 var_dump 打印正确的值:

array(4) {
    ["param1"]=>
        string(6) "value1"
    ["param2"]=>
        string(6) "value2"
    ["param3"]=>
        string(6) "value3"
    ["param10"]=>
        array(1) {
            [0]=>
                string(2) "23"
        }
}

但是第二个给“param10”的值是错误的:

array(4) {
    ["param1"]=>
        string(6) "value1"
    ["param2"]=>
        string(6) "value2"
    ["param3"]=>
        string(6) "value3"
    ["param10"]=>
        string(5) "Array"
}

有没有人想办法解决这个问题?

【问题讨论】:

    标签: php arrays curl post multidimensional-array


    【解决方案1】:

    您还必须在 POST 中使用 http_build_query()。你必须像这样替换你的curl_setopt($curl,CURLOPT_POSTFIELDS, $data);curl_setopt($curl,CURLOPT_POSTFIELDS, http_build_query($data));

    【讨论】:

    • 我认为 POST 请求不像“param=value1&param2=value2...”。非常感谢!
    • 很高兴能提供帮助:)
    • @Bapt 上传变量有两种不同的格式。 http_build_query 将使用application/x-www-urlencoded 格式,使用数组将使curl 使用multipart/form-data 格式。他们都有起起落落。但在这两种情况下,发送标头 Content-Type: application/json 都是错误的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2017-09-02
    • 2017-08-03
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多