如何在PHP中的cURL POST HTTP请求中包含授权头?

如何在PHP中的cURL POST HTTP请求中包含授权头?,php,http,curl,oauth,Php,Http,Curl,Oauth,我正试图通过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

我正试图通过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);
$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);
不工作,请帮忙。:)

更新:我接受了Jason McCreary的建议,现在我的代码如下所示:

$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);
$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的把戏为我做到了。::)谢谢

您拥有大部分代码

CURLOPT_HTTPHEADER
for将每个头作为一个元素的数组。您有一个具有多个标题的元素

您还需要将授权标头添加到
$header
数组中

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

@杰森·麦克里是完全正确的。此外,我建议您使用此代码,以便在发生故障时获取更多信息:

$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,以检查HTTP响应或类似响应

curl_setopt($crl, CURLOPT_HEADER, true);
编辑2

关于
Curl错误:SSL证书问题,请验证CA证书是否正常
尝试添加此标头(仅为了调试,在生产环境中,您应将这些选项保留在
true
):


使用“内容类型:application/x-www-form-urlencoded”而不是“application/json”

无耻的自我宣传。您可能对我编写的oAuth库感兴趣:哦,嘿,这看起来很酷。稍后将查看:)@peehaa+1。。。。。“不管怎样,好东西都必须得到提升。”PeeHaa好的,对不起。我会收回我的陈述嘿,嗯。仍然没有得到任何输出:(你可能有不止一个问题。很难说。有错误吗?你已经确认了身份验证令牌?等等。是的,我在回显身份验证令牌,它似乎给了我一个很长很好的字符串。-请检查我的更新代码,并检查是否需要做任何事情。非常感谢你的耐心。:)嘿,谢谢你添加这个。现在,我得到一个错误:Curl error:SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败工作!:(非常感谢你