使用Curl上传应用包至Zendesk REST API返回500状态码求助
解决Zendesk应用包上传PHP Curl 500错误的问题
嘿Daniel,别慌!我对比了你的PHP代码和能正常工作的命令行Curl,发现了几个关键问题,调整后应该就能解决500错误了:
核心问题分析
你命令行里用的是-F参数,这会让Curl自动以**multipart/form-data**格式发送请求(这是文件上传的标准格式),但你的PHP代码里犯了两个关键错误:
- 手动设置了错误的
Content-type: application/binary,和Zendesk API期望的格式不匹配 - 文件上传的字段名和格式不对,而且用了PHP新版本已经废弃的
@语法
修正后的PHP代码
// basic settings for your Zendesk $userName = 'xxxxx@xxxx.com/token'; $apiKey = 'xkalkjsdXASJKDlasaknfkajsfASASASD'; // upload file info $fileName = 'v5.0.zip'; $filePath = 'path/to/file/v5.0.zip'; $url = 'https://mysubdomain.zendesk.com/api/v2/apps/uploads.json'; $ch = curl_init($url); // 认证设置保持不变 curl_setopt($ch, CURLOPT_USERPWD, $userName.":".$apiKey); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); // 用POST代替CUSTOMREQUEST,更规范 // 移除错误的Content-Type,让Curl自动生成multipart/form-data的头 // curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/binary')); curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // 不需要CURLOPT_BINARYTRANSFER,CURLFile会处理 // curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // 关键修正:使用CURLFile上传,字段名和命令行一致为uploaded_data $postFields = [ 'uploaded_data' => new CURLFile($filePath, 'application/zip', $fileName) ]; curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0"); $output = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 新增错误排查:查看Curl本身的错误信息 if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); } curl_close($ch); // 输出结果和状态码辅助排查 var_dump($code, $output);
关键调整点说明
- 字段名匹配:命令行里用的是
uploaded_data=@文件路径,所以PHP里的POST字段名必须是uploaded_data,之前你用文件名作为键是错误的 - CURLFile替代@语法:PHP 5.5及以上版本已经废弃了用
@路径的方式,改用CURLFile类来处理文件上传,这能避免很多兼容性和安全问题 - 移除错误的Content-Type:当你用
CURLFile和数组作为CURLOPT_POSTFIELDS时,Curl会自动生成正确的multipart/form-data请求头,手动设置反而会导致格式错误 - 用CURLOPT_POST代替CUSTOMREQUEST:对于标准POST请求,用
CURLOPT_POST比CURLOPT_CUSTOMREQUEST更稳妥
你可以试试这个修正后的代码,应该就能成功上传了!如果还有问题,代码里新增的Curl错误打印能帮你进一步定位问题~
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

