【问题标题】:when i send more then 1 header it returns 400 error当我发送超过 1 个标头时,它返回 400 错误
【发布时间】:2020-11-06 08:24:19
【问题描述】:
$url = 'https://discord.com/api/guilds/******323098841117/members/'.$_SESSION['cid'];
$data = array("access_token" => 'Bearer '.$_SESSION['token']);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
$arr = ['Content-Type: application/json','Authorization: Bot NzI2NTQ5NjI1MDYx**********xBakg.ZfpEdgqsW3rZuPLTXSm5Q5p20bU'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $arr);
$response = curl_exec($ch);
echo($response);
echo("Bearer ".$_SESSION['token']);
echo("Welcome back, ".$_SESSION['name']);

400 错误

在标头机器人令牌中

机器人已经在服务器上

【问题讨论】:

  • 你告诉发送 JSON,但你没有。
  • 非常感谢!现在工作!
  • 我已经发布了一个详细的答案,因为其他人可能有同样的问题。

标签: php oauth-2.0 discord


【解决方案1】:

问题不在于标题本身。发送的 content-type 是application/json,但是通过 cURL 传输的数据不是 JSON,而是 URL 编码的 key/value 对。

$data 是一个像这里设置的数组

$data = array("access_token" => 'Bearer '.$_SESSION['token']);

并且你正确地将其转换为文本

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

但它必须转换为 JSON,所以只需将 http_build_query 替换为 json_encode,如下所示。

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2023-03-27
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2020-04-18
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多