PHP中使用Curl调用Discord API无法获取图片数据求助
问题分析与解决方案
你的核心问题分两种场景,对应不同的解决方式:
场景1:发送带图片的消息后,响应中没有图片链接
你当前的代码仅发送了纯文本内容,未附加图片,所以响应里的attachments数组为空是正常现象。要发送带图片的消息,需改用multipart/form-data格式提交(Discord文件上传要求),而非application/json。
修改后的代码示例:
$myChannel = "9999214390985xxxxx"; $myToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $msg = '#Hello'; $imagePath = '/path/to/your/image.jpg'; // 替换为你的图片本地路径 $ch = curl_init('https://discord.com/api/v9/channels/' . $myChannel . '/messages'); curl_setopt($ch, CURLOPT_POST, true); // 构建表单数据,包含文本内容和图片文件 $postFields = array( 'content' => $msg, 'file' => new CURLFile($imagePath) ); curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bot ' . $myToken )); $answer = curl_exec($ch); echo $answer; if (curl_error($ch)) { echo curl_error($ch); } curl_close($ch);
执行后,响应的attachments数组会包含图片的完整链接(url字段)。
场景2:获取频道中已存在的用户图片消息,响应无图片链接
如果是要抓取频道内用户已发送的带图消息,需调用获取频道消息的API,而非发送消息的API,同时注意以下几点:
- 升级API版本:你当前用的v6已被Discord废弃,改用最新的v9版本避免兼容性问题。
- 确保Bot权限:需给Bot分配
Read Message History权限,才能读取历史消息。
获取消息的代码示例:
$myChannel = "9999214390985xxxxx"; $myToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 获取频道最近10条消息,可调整limit参数 $ch = curl_init('https://discord.com/api/v9/channels/' . $myChannel . '/messages?limit=10'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bot ' . $myToken )); $answer = curl_exec($ch); $messages = json_decode($answer, true); // 遍历消息,提取图片链接 foreach ($messages as $msg) { if (!empty($msg['attachments'])) { foreach ($msg['attachments'] as $attachment) { echo "图片链接:" . $attachment['url'] . "\n"; } } } if (curl_error($ch)) { echo curl_error($ch); } curl_close($ch);
内容的提问来源于stack exchange,提问作者amit
相关产品推荐
相关产品推荐

