一尘不染

如何在PHP的cURL POST HTTP请求中包括Authorization标头?

php

我正在尝试通过Gmail OAuth 2.0访问用户的邮件,并且正在通过Google的OAuth 2.0 Playground解决此问题

在这里,他们指定了我需要将其作为HTTP REQUEST发送:

POST /mail/feed/atom/ HTTP/1.1
Host: mail.google.com
Content-length: 0
Content-type: application/json
Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString

我尝试编写代码来发送此请求,如下所示:

$crl = curl_init();
$header[] = 'Content-length: 0 
Content-type: application/json';

curl_setopt($crl, CURLOPT_HTTPHEADER, $header);
curl_setopt($crl, CURLOPT_POST,       true);
curl_setopt($crl, CURLOPT_POSTFIELDS, urlencode($accesstoken));

$rest = curl_exec($crl);

print_r($rest);

无法运作,请提供协助。:)

更新: 我接受了 杰森·麦克里Jason McCreary )的建议,现在我的代码如下所示:

$crl = curl_init();

$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: OAuth '.$accesstoken;

curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);

curl_close($crl);

print_r($rest);

但是我没有得到任何输出。我认为cURL在某处默默失败。请帮忙。:)

更新2: NomikOS 的把戏为我做到了。:) :) :) 谢谢!!


阅读 737

收藏
2020-05-29

共1个答案

一尘不染

@ jason-mccreary是完全正确的。此外,我建议您使用此代码来获取更多故障信息:

$rest = curl_exec($crl);

if ($rest === false)
{
    // throw new Exception('Curl error: ' . curl_error($crl));
    print_r('Curl error: ' . curl_error($crl));
}

curl_close($crl);
print_r($rest);

编辑1

要进行调试,您可以将其设置CURLOPT_HEADER为true以使用firebug ::
net
或类似工具检查HTTP响应。

curl_setopt($crl, CURLOPT_HEADER, true);

编辑2

关于Curl error: SSL certificate problem, verify that the CA cert is OK尝试添加这些标头(仅用于调试,在生产环境中,应将这些选项保留在中true):

curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);
2020-05-29