Intereting Posts
mysqli_free_result необходимо? PHP – простой способ чтения одной записи из MySQL Я не могу получить доступ к XAMPP phpMyAdmin; он говорит: Ошибка MySQL: Документация Не удается подключиться: неверные настройки Каков наилучший способ разбить строку на массив символов Юникода в PHP? регулярное выражение для соответствия точной строке Показывать подкатегорию вместо Root в меню эквивалент password_hash для php 5.4? Как создать безопасный и RESTful-сервис в PHP? Как получить ответ ajax от успеха и назначить его переменной, используя jQuery? У комментариев сделать код медленнее? Только «Type = Text» и «Textarea» повторно заполняются после ошибки перенаправления; Но «Выбрать» и «Флажки» не в CodeIgniter 3 Клонирование и добавление DOMElement: «Неверная ошибка документа» Прочитайте каждую строку файла txt новому элементу массива Использование PHP с Socket.io Создание простой поисковой системы на основе текстового файла

PHP Curl с Google Calendar

<?php if(isset($_GET['token'])) { $url="http://www.google.com/calendar/feeds/default/allcalendars/full"; $useragent="PHP 5.2"; $header=array( "GET /accounts/AuthSubSessionToken HTTP/1.1", "Content-Type: application/x-www-form-urlencoded", "Authorization: AuthSub token=".$_GET['token'], "User-Agent: PHP/5.2", "Host: https://www.google.com", "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Connection: keep-alive" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); print_r($data); } ?> 

В результате страница не найдена. Однако я вызываю http://www.google.com/calendar/feeds/default/allcalendars/full из firefox, это файл возврата XML. Итак, я думаю, мой код может ошибаться. Но я не могу найти ошибку. 🙁

Related of "PHP Curl с Google Calendar"

Это связано с тем, что вы получаете доступ к Календарю Google через свой личный порт. Всякий раз, когда вы обращаетесь к этому конкретному URL-адресу, Google проверяет, не вошли ли вы в систему. Если нет, он отправляет 404. Если вы, он выдает календарь на основе настроек, которые вы указали. В этом URL-адресе не указан конкретный календарь, который он должен вытащить с сайта, и он не может использовать файлы cookie, хранящиеся на компьютере пользователя, потому что он извлекается с вашего сервера, у которого не будет файлов cookie для календаря. Когда я пытаюсь получить доступ к этой странице без входа в систему, я получаю ошибку, требуемую авторизацией 401, на которую я ставлю то, что получает PHP, и вы просто этого не понимаете.

Вам нужно зайти в свои настройки Календаря Google и найти варианты внедрения, чтобы найти URL-адрес, специфичный для вашей учетной записи, чтобы он всегда извлекал фид XML для вашего календаря.

Подробнее о «Календарном адресе» Google читайте здесь: http://www.google.com/support/calendar/bin/answer.py?answer=34578.

Просмотр из других приложений: http://www.google.com/support/calendar/bin/answer.py?hl=ru&answer=37648.

Я думаю, что вы можете переопределить URL этой строки в заголовке:

 GET /accounts/AuthSubSessionToken HTTP/1.1 

Я думаю, что он укажет CURL на http://www.google.com/accounts/AuthSubSessionToken

Что происходит, когда вы удаляете его?

Я понял … Я изменился так

 <?php function make_api_call($url, $token) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $curlheader[0] = sprintf("Authorization: AuthSub token=\"%s\"/n", $token); curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader); $output = curl_exec($ch); curl_close($ch); return $output; } function get_session_token($onetimetoken) { $output = make_api_call("https://www.google.com/accounts/AuthSubSessionToken", $onetimetoken); if (preg_match("/Token=(.*)/", $output, $matches)) { $sessiontoken = $matches[1]; } else { echo "Error authenticating with Google."; exit; } return $sessiontoken; } if(isset($_GET['token'])) { $sessiontoken=get_session_token($_GET['token']); $accountxml = make_api_call("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full", $sessiontoken); print_r($accountxml); } else { $next=urlencode("http://www.mysteryzillion.org/gdata/index.php"); $scope=urlencode("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full"); ?> <a href="https://www.google.com/accounts/AuthSubRequest?next=<?= $next ?>&scope=<?= $scope ?>&secure=0&session=1">Click here to authenticate through Google.</a> <? } ?> . <?php function make_api_call($url, $token) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $curlheader[0] = sprintf("Authorization: AuthSub token=\"%s\"/n", $token); curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader); $output = curl_exec($ch); curl_close($ch); return $output; } function get_session_token($onetimetoken) { $output = make_api_call("https://www.google.com/accounts/AuthSubSessionToken", $onetimetoken); if (preg_match("/Token=(.*)/", $output, $matches)) { $sessiontoken = $matches[1]; } else { echo "Error authenticating with Google."; exit; } return $sessiontoken; } if(isset($_GET['token'])) { $sessiontoken=get_session_token($_GET['token']); $accountxml = make_api_call("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full", $sessiontoken); print_r($accountxml); } else { $next=urlencode("http://www.mysteryzillion.org/gdata/index.php"); $scope=urlencode("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full"); ?> <a href="https://www.google.com/accounts/AuthSubRequest?next=<?= $next ?>&scope=<?= $scope ?>&secure=0&session=1">Click here to authenticate through Google.</a> <? } ?>