Подтвердить что ты не робот

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

Я пытаюсь получить доступ к почтовым сообщениям пользователя через Gmails OAuth 2.0, и я выясню это через платформу Google 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);

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

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

4b9b3361

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

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

Ответ 2

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

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

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

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