You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用CURL发送含嵌套数组的POST请求构造问题求助

问题分析与修复方案

嘿,我一眼就看出你哪里出问题了——你构造$postData的数组结构完全不对!

你需要的目标JSON里,deliveryAddress是一个包含两个对象的数组,但你现在的代码里,是把两个地址的所有键都塞进了同一个关联数组里。PHP的关联数组里重复的键会被后面的覆盖,所以最终json_encode之后,只会保留最后那一组ID=7的地址数据,这肯定不符合要求。

正确的数组构造方式

你需要把每个地址做成一个独立的关联数组,然后把这两个数组放到deliveryAddress对应的索引数组里,这样就能生成你要的JSON结构了。

修正后的完整代码

<?php
// 正确构造postData:deliveryAddress是包含两个子数组的数组
$postData = array(
    'deliveryAddress' => array(
        // 第一个地址对象
        array(
            'ID' => '5',
            'address' => 'example@example2.com',
            'method' => 'EMAIL',
            'checkbox' => true,
            'flashlight' => false
        ),
        // 第二个地址对象
        array(
            'ID' => '7',
            'address' => 'example45@example3.com',
            'method' => 'EMAIL',
            'checkbox' => true,
            'flashlight' => false
        )
    )
);

$url = "ServerIamSendingItTo";
$ch = curl_init();
$headers = array(
    'Content-Type: application/json',
    'Authorization: BASIC (mybase64encodedpass)=='
);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);
$ch_error = curl_error($ch);

if ($ch_error) {
    echo "ERROR: " . $ch_error;
    curl_close($ch);
} else {
    var_dump($result);
}
curl_close($ch);
?>

为什么这样可行?

  • 现在$postData['deliveryAddress']是一个索引数组,里面的每个元素都是一个独立的关联数组(对应JSON里的对象)
  • 用json_encode处理这个数组后,会生成和你目标完全一致的JSON结构:
    {
        "deliveryAddress": [
            {
                "ID": "5",
                "address": "example@example2.com",
                "method": "EMAIL",
                "checkbox": true,
                "flashlight": false
            },
            {
                "ID": "7",
                "address": "example45@example3.com",
                "method": "EMAIL",
                "checkbox": true,
                "flashlight": false
            }
        ]
    }
    

另外提个小建议:生产环境里最好把CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST设为true,关闭SSL验证会有安全风险哦。

内容的提问来源于stack exchange,提问作者Lain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:29:38