通过Discord Webhook发送附件/文件

3

我一直在努力弄清如何在Webhooks中发送附件。我已经尝试了数小时,但无法搞清楚。我已经阅读了这篇文章,但仍然不太理解。我还阅读了文档,但很难理解。有人能帮助我吗?

<pre><?php 

$url = "WEBHOOK URL HERE";

$headers = [ 'Content-Type: multipart/form-data; charset=utf-8' ];
$POST = [
    // Message
    "content" => "Hello World!",
    
    // Username
    "username" => "testuser",

    // File upload
    "file" => curl_file_create("image.gif", 'image/gif', 'image')

];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($POST));
$response   = curl_exec($ch);
var_dump($response);

我遇到了错误

"{"message": "Cannot send an empty message", "code": 50006}"

不要自己设置Content-Type头,让cURL处理它。multipart/form-data请求需要在各个部分之间有一个边界,而这个边界字符串需要包含在头部中。但是你指定的缺失了,所以接收者将不知道如何解释此请求。 - CBroe
@CBroe 抱歉,我有点困惑你的意思是什么? - Zoey Malkov
“不要设置那个头部”这句话有什么让人困惑的地方吗? - CBroe
@CBroe 即使我没有设置它,它也不起作用。 - Zoey Malkov
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1

替换

"file" => curl_file_create("image.gif", 'image/gif', 'image.gif')

带着

"file" => curl_file_create(realpath("image.gif"), 'image/gif', 'image.gif')
<pre><?php 

$url = "WEBHOOK URL HERE";

$headers = [ 'Content-Type: multipart/form-data; charset=utf-8' ];
$POST = [
    // Message
    "content" => "Hello World!",
    
    // Username
    "username" => "testuser",

    // File upload
    "file" => curl_file_create(realpath("image.gif"), 'image/gif', 'image.gif')

];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($POST));
$response   = curl_exec($ch);
var_dump($response);

以上代码仅将您自己的服务器文件上传到Discord。

如果您想从其他URL获取文件并上传到Discord,则需要首先将相同文件作为临时文件上传到您自己的服务器,然后在此处设置此临时文件。

"file" => curl_file_create(realpath($tempfile), 'image/gif', 'image.gif')

在此之后

$response   = curl_exec($ch);
unlink($tempfile); //delete temp file if you want.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,