PHP中使用CURLOPT_POSTFIELDS传递同名多字段的方法
关于CURLOPT_POSTFIELDS传递同名多字段的问题
你的写法不可行。当你把二维数组['options[]' => [1,2]]传给CURLOPT_POSTFIELDS时,PHP的curl扩展会将其编码为带索引的格式(比如options%5B0%5D=1&options%5B1%5D=2),这和后端期望的options[]=1&options[]=2(无索引的同名字段)不一致。
下面是两种可行的解决方案:
方案1:手动拼接URL编码字符串
如果你需要application/x-www-form-urlencoded格式的POST数据,直接拼接成符合要求的字符串即可:
$postData = 'options[]=1&options[]=2'; curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
也可以用http_build_query配合数组循环处理,避免手动拼接的繁琐:
$options = [1, 2]; $postParts = []; foreach ($options as $val) { $postParts[] = http_build_query(['options[]' => $val]); } $postData = implode('&', $postParts); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
方案2:使用多部分表单数据(multipart/form-data)
如果后端接受multipart/form-data格式,可以构造包含重复字段名的索引数组:
$postData = [ ['name' => 'options[]', 'contents' => '1'], ['name' => 'options[]', 'contents' => '2'] ]; curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
这种方式下,curl会自动生成两个同名的表单字段,无需担心PHP数组键名重复覆盖的问题。
内容的提问来源于stack exchange,提问作者Jayy
相关产品推荐
相关产品推荐

