You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Curl上传应用包至Zendesk REST API返回500状态码求助

解决Zendesk应用包上传PHP Curl 500错误的问题

嘿Daniel,别慌!我对比了你的PHP代码和能正常工作的命令行Curl,发现了几个关键问题,调整后应该就能解决500错误了:

核心问题分析

你命令行里用的是-F参数,这会让Curl自动以**multipart/form-data**格式发送请求(这是文件上传的标准格式),但你的PHP代码里犯了两个关键错误:

  1. 手动设置了错误的Content-type: application/binary,和Zendesk API期望的格式不匹配
  2. 文件上传的字段名和格式不对,而且用了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:06:23