Как включить заголовок авторизации в HTTP-запросе cURL POST в PHP?

Я пытаюсь получить доступ к почте пользователя через Gmails OAuth 2.0, и я это выясню с помощью игровой площадки OAuth 2.0 от Google

Здесь они указали, что мне нужно отправить это как 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); 

Но я не получаю выход из этого. Я думаю, что cURL тихо где-то терпит неудачу. Пожалуйста, помогите. 🙂

ОБНОВЛЕНИЕ 2: трюк NomikOS сделал это для меня. 🙂 🙂 🙂 Спасибо!!

@ 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, чтобы проверить HTTP-ответ с помощью firebug :: net или аналогичного.

 curl_setopt($crl, CURLOPT_HEADER, true); 

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

У вас большая часть кода …

CURLOPT_HTTPHEADER для curl_setopt() принимает массив с каждым заголовком в качестве элемента. У вас есть один элемент с несколькими заголовками.

Вам также нужно добавить заголовок авторизации в массив $header .

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