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

我试图通过Gmail OAuth 2.0访问用户的邮件,我通过Google的OAuth 2.0 Playground

在这里,他们已经指定我需要发送这个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); 

不工作,请帮助。 🙂

更新:我带了Jason McCreary的build议,现在我的代码如下所示:

 $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的技巧为我做了。 :) :) :) 谢谢!!

@ jason-mccreary是完全正确的。 此外,我build议你这个代码,以获得更多的信息,以防万一出现故障:

 $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

要debugging,你可以设置CURLOPT_HEADER为true来检查HTTP响应与萤火虫::净或类似的。

 curl_setopt($crl, CURLOPT_HEADER, true); 

编辑2

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

 curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false); 

你有大部分的代码…

curl_setopt() CURLOPT_HTTPHEADER将每个头作为一个元素。 您有一个包含多个标题的元素。

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

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