Я пытаюсь получить доступ к почте пользователя через 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';