将带PUT方法与-F选项的有效cURL命令转换为PHP cURL代码
完整转换后的PHP cURL代码
我帮你把这条可运行的cURL命令完整转换成PHP代码了,每个参数都严格对应原命令的配置,直接就能用:
<?php // 假设你的代理常量已经定义 define('PROXY_MOBILE_DE', 'api.test.sandbox.mobile.de:8080'); $ch = curl_init(); // 目标URL $url = 'https://services.mobile.de/seller-api/sellers/1086/ads/943627/images'; // 配置cURL参数 curl_setopt_array($ch, [ // 对应原命令的 -k:忽略SSL证书验证 CURLOPT_SSL_VERIFYPEER => false, // 对应原命令的 -v:开启 verbose 模式(调试用,不需要可设为false) CURLOPT_VERBOSE => true, // 对应原命令的 -x:设置代理 CURLOPT_PROXY => PROXY_MOBILE_DE, // 对应原命令的 -u:设置用户名和密码 CURLOPT_USERPWD => 'xxx:yyy', // 设置请求头:对应原命令的Accept头 CURLOPT_HTTPHEADER => [ 'Accept: application/vnd.de.mobile.api+json', // 注意:multipart/form-data的头不需要手动设置,PHP会自动处理 // 手动添加反而可能导致格式冲突 ], // 对应原命令的 -F:处理文件上传(PHP5.5+推荐用CURLFile,更安全) CURLOPT_POSTFIELDS => [ 'image1' => new CURLFile('1000_1.JPG', 'image/jpg'), ], // 对应原命令的 -X PUT:设置请求方法为PUT CURLOPT_CUSTOMREQUEST => 'PUT', // 返回响应内容而不是直接输出 CURLOPT_RETURNTRANSFER => true, // 把verbose日志临时存到内存(调试用) CURLOPT_STDERR => fopen('php://temp', 'rw+'), ]); // 执行请求 $response = curl_exec($ch); // 调试:输出verbose日志(如果开启了VERBOSE) if (CURLOPT_VERBOSE) { rewind(curl_getinfo($ch, CURLINFO_STDERR)); $verboseLog = stream_get_contents(curl_getinfo($ch, CURLINFO_STDERR)); echo "Verbose Log:\n" . $verboseLog . "\n"; } // 检查请求是否出错 if (curl_errno($ch)) { echo 'cURL Error: ' . curl_error($ch); } else { echo 'Response: ' . $response; } // 关闭cURL资源 curl_close($ch); ?>
关键细节说明:
- 原命令里的
-H "Content-Type: multipart/form-data"不需要手动设置,PHP在使用CURLFile时会自动生成带boundary的正确Content-Type头,手动添加反而可能导致上传格式错误 CURLFile是PHP 5.5及以上版本的推荐写法,比旧的@语法更安全,也能避开curl.file_uploads配置限制- 如果不需要调试,可以把
CURLOPT_VERBOSE设为false,并去掉后面的verbose日志输出部分 - 确保
1000_1.JPG的路径是正确的(可以用绝对路径避免相对路径问题)
内容的提问来源于stack exchange,提问作者denimb
相关产品推荐
相关产品推荐

