如何在包含在PHP卷曲POST HTTP请求授权头?(How to include Authoriz

2019-06-18 01:56发布

我试图通过Gmail的OAuth 2.0用户访问用户的邮件,而我通过谷歌的OAuth 2.0游乐场搞清楚了这一点

在这里,他们已经指定我需要发送这是一个HTTP请求:

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);

不能正常工作,请帮助。 :)

UPDATE:我把杰森麦克里的建议,现在我的代码如下所示:

$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);

但我没有得到任何输出出于此。 我觉得卷曲默默地失败的地方。 请不要帮忙。 :)

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

Answer 1:

@杰森 - 麦克里是完全正确的。 此外,我建议你这个代码来获得在发生故障的情况下,更多的信息:

$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为真检查与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);


Answer 2:

你有大部分的代码...

CURLOPT_HTTPHEADER用于curl_setopt()需要与每个头作为元素的数组。 您有多个头一个元素。

您还需要授权头添加到您的$header阵。

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


Answer 3:

使用“内容类型:application / X WWW的窗体-urlencoded”而不是“应用/ JSON”



文章来源: How to include Authorization header in cURL POST HTTP Request in PHP?