在PHP和cURL中使用discord API

use*_*480 6 php ssl curl

我已经制作了一个不和谐的机器人,我想要API来管理频道,显示消息,那些东西.我开始使用Postman来调用API,它运行正常.

链接到API:https://discordapp.com/developers/docs/intro

然后我尝试使用PHP(wamp)执行请求,使用cURL,请求被发送,但API发回给我一个401 Unauthorized响应,尽管事实上我发送了正确的Authorization标头.我添加了详细选项以获取更多信息:

* Hostname in DNS cache was stale, zapped

*   Trying 104.16.58.5...

* Connected to discordapp.com (104.16.58.5) port 443 (#0)

* ALPN, offering http/1.1

* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH

* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256

* ALPN, server accepted to use http/1.1
* Server certificate:

*    subject: OU=Domain Control Validated; OU=PositiveSSL; CN=discordapp.com

*    start date: 2016-03-01 00:00:00 GMT

*    expire date: 2017-03-03 23:59:59 GMT

*    subjectAltName: discordapp.com matched

*    issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO RSA Domain Validation Secure Server CA

*    SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> GET /api/channels/230833430827499520/messages HTTP/1.1
Host: discordapp.com
Accept: */*
Authorization : Bot <TOKEN>

< HTTP/1.1 401 UNAUTHORIZED
< Date: Sat, 01 Oct 2016 01:23:22 GMT
< Content-Type: application/json
< Content-Length: 43
< Connection: keep-alive
< Set-Cookie: __cfduid=d23fd84fe760ad0b225004284861067621475285002; expires=Sun, 01-Oct-17 01:23:22 GMT; path=/; domain=.discordapp.com; HttpOnly
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< Via: 1.1 google
< Alt-Svc: clear
< Server: cloudflare-nginx
< CF-RAY: 2eac1be3385d148b-AMS
< 
* Connection #0 to host discordapp.com left intact
Run Code Online (Sandbox Code Playgroud)

我的代码:

$url = 'https://discordapp.com/api/channels/230833430827499520/messages';

$ch = curl_init();
$f = fopen('request.txt', 'w');
curl_setopt_array($ch, array(
    CURLOPT_URL            => $url, 
    CURLOPT_HTTPHEADER     => array('Authorization : Bot <TOKEN>'), 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_STDERR         => $f,
));
$response = curl_exec($ch);
fclose($f);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

我也尝试过file_get_contents,但没有奏效.我看不出有什么问题,也许是SSL证书?有什么想法吗?

use*_*480 6

好吧,我只需要删除标题中的第一个空格

CURLOPT_HTTPHEADER     => array('Authorization: Bot <TOKEN>')
Run Code Online (Sandbox Code Playgroud)

代替

CURLOPT_HTTPHEADER     => array('Authorization : Bot <TOKEN>'), 
Run Code Online (Sandbox Code Playgroud)