如何用PHP CURL发送同名参数的多个multipart/form-data文件
实现方法
当然可以不用手动构造multipart消息体来实现需求。PHP的cURL扩展原生支持生成包含多个同名参数的multipart/form-data请求,只需要通过特定的数组格式传递POST字段即可。
具体代码示例
// 初始化cURL会话 $ch = curl_init('https://example.com/send/830a6665'); // 准备要上传的文件,使用CURLFile对象确保正确处理文件 $file1 = new CURLFile( './storage/file1.jpg', 'image/jpeg', // MIME类型,可根据实际文件调整 'file1.jpg' // 文件名,可选,默认是原文件名 ); $file2 = new CURLFile( './storage/file2.jpg', 'image/jpeg', 'file2.jpg' ); // 构造POST字段数组:用数字索引数组包裹多个同名的files参数 $postFields = [ ['name' => 'files', 'file' => $file1], ['name' => 'files', 'file' => $file2] ]; // 设置cURL选项 curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, // 将响应内容以字符串返回,而非直接输出 CURLOPT_HTTPHEADER => [ 'Authorization: XXXZZZZZZZXX' // 授权头 ], CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postFields // 传入构造好的字段数组 ]); // 执行请求并获取响应 $response = curl_exec($ch); // 检查请求是否出错 if(curl_errno($ch)) { echo 'cURL错误:' . curl_error($ch); } // 关闭cURL会话 curl_close($ch); // 处理响应 var_dump($response);
原理说明
当CURLOPT_POSTFIELDS传入的是数字索引数组,且每个元素是包含name(参数名)和file(CURLFile对象)的关联数组时,PHP cURL会自动生成符合要求的multipart/form-data请求体,其中每个文件对应的参数名都是files,不会自动添加[]后缀,和你提供的curl命令效果完全一致。
内容的提问来源于stack exchange,提问作者Lito
相关产品推荐
相关产品推荐

