PHP实现ShareX自定义上传器POST请求并获取响应
ShareX自定义上传器配置(中文翻译)
{ "版本": "14.1.0", "名称": "Discord 上传", "目标类型": "图片上传器", "请求方法": "POST", "请求地址": "https://discord.com/api/v9/channels/CHANNEL HERE/messages", "请求头": { "authorization": "Discord 令牌" }, "请求体类型": "MultipartFormData", "请求参数": { "content": null, "tts": "false" }, "文件表单字段名": "file", "返回图片地址": "{json:['attachments'][0]['url']}", "返回缩略图地址": "{json:['attachments'][0]['url']}" }
对应的PHP POST请求代码
以下是完全匹配上述配置的PHP上传实现,包含请求头构造、多表单数据处理及响应解析:
<?php // 替换为你的实际配置信息 $channelId = "你的频道ID"; // 替换原配置中的CHANNEL HERE $discordToken = "你的Discord令牌"; // 替换原配置中的Discord Token here $imagePath = "./test.png"; // 要上传的本地图片路径 // 构造完整请求地址 $requestUrl = "https://discord.com/api/v9/channels/{$channelId}/messages"; // 初始化cURL会话 $ch = curl_init($requestUrl); // 组装MultipartFormData参数 $postData = [ 'content' => '', // 对应配置中的null,传空字符串兼容接口要求 'tts' => 'false', 'file' => new CURLFile(realpath($imagePath)) // 自动处理文件MIME类型与文件名 ]; // 设置cURL核心选项 curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData, CURLOPT_HTTPHEADER => [ "authorization: {$discordToken}" ], CURLOPT_RETURNTRANSFER => true, // 让cURL返回响应内容而非直接输出 CURLOPT_SSL_VERIFYPEER => true, // 开启SSL验证保障请求安全 CURLOPT_FOLLOWLOCATION => true // 跟随接口重定向 ]); // 执行请求并获取结果 $response = curl_exec($ch); $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 处理请求结果 if ($response === false) { echo "上传失败: " . curl_error($ch); } else { $responseJson = json_decode($response, true); if (json_last_error() === JSON_ERROR_NONE) { if (isset($responseJson['attachments'][0]['url'])) { echo "上传成功,图片地址: " . $responseJson['attachments'][0]['url']; } else { echo "上传成功但未获取到图片地址,响应内容: " . $response; } } else { echo "响应解析失败,原始响应: " . $response; } } // 关闭cURL会话 curl_close($ch); ?>
关键注意事项
- 确保你的Discord令牌拥有目标频道的发消息和上传附件权限
- 本地图片路径需正确,
realpath()函数会自动解析为绝对路径避免错误 - 若上传大尺寸图片,需调整PHP配置中的
upload_max_filesize和post_max_size参数 - 生产环境请勿硬编码令牌,建议使用环境变量存储敏感信息
内容的提问来源于stack exchange,提问作者Average_User
相关产品推荐
相关产品推荐

