【问题标题】:Array to String Conversion error on passing multi-dimential array to CURLOPT_POSTFIELDS将多维数组传递给 CURLOPT_POSTFIELDS 时数组到字符串的转换错误
【发布时间】:2021-12-05 10:57:06
【问题描述】:

希望你做得很好。 我想将多维作为 raw-data 传递给我的 cURL 请求。但是当我尝试将数组传递给CURLOPT_POSTFIELDS 时,它给了我一个数组到字符串转换的错误。

当我尝试像这样传递数组时:

    $post_data = [
        "date"=> $_POST['date'],
        "items" => $plan_details,
        "form" => [
            "clientName" => [
                "name"      => $_POST['form_data'][0]['clientName'],
                "mobile"    => $_POST['form_data'][0]['mobile'],
            ],
            "clientAddress" => [
                "line"      => $_POST['form_data'][0]['addressLine'],
                "city"      => $_POST['form_data'][0]['addressCity'],
                "state"     => $_POST['form_data'][0]['addressState'],
                "country"   => "",
                "pincode"   => ""
            ],
            "clientGST" => [
                "companyName"   => "",
                "gstNo"         => ""
            ],
        ]
    ];

以及 cURL 请求:

    curl_setopt_array($curl, array(
      CURLOPT_URL => "<URL>",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT        => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST  => 'POST',
      CURLOPT_POSTFIELDS     => $post_data,
      CURLOPT_HTTPHEADER     => array(
            "Authorization: Bearer <key>"
        ),
    ));

如何将多维数组传递给CURLOPT_POSTFIELDS

【问题讨论】:

  • 目标 API 支持哪些 POST 格式?它支持multipart/form-data 吗?它支持x-www-form-urlencoded 吗?支持application/json吗?
  • 谢谢@hanshenrik。问题是Content-Type: application/json。我把它保存在CURLOPT_HTTPHEADER 中,现在可以正常使用了。
  • 您在上面提供的代码不适用于需要 application/json 的 API,您需要 CURLOPT_POSTFIELDS =&gt; json_encode($post_data), 来实现这一点
  • 正确。我只是忘了提。我们需要json_encode数据然后提供Content-type

标签: php arrays curl php-curl


【解决方案1】:

您可以使用http_build_query 函数来构建postfields 字符串。

【讨论】:

  • 感谢您的帮助 @pavel-třupek 但 API 服务器不接受我们使用 http_build_query 构建的字符串,因此在标头中传递 Content-type 对我有用。
  • 我以为您想将数组编码为 post 数据参数,而不是 json 编码。
猜你喜欢
  • 1970-01-01
  • 2019-01-12
  • 2016-05-02
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
相关资源
最近更新 更多