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
相关产品推荐
相关产品推荐

