2016-11-26 3 views
0

Я знаю, что в this link Google говорит, что он больше не доступен.Как загрузить файл KML Google

Однако, если вы просто запустить скрипт, чтобы создать ссылку, как это:

$timespan = [ 
     'year' => '2015', 
     'month'=> '0', 
     'day' => '28', 
    ]; 
    $path = 'https://www.google.com/maps/timeline/kml?authuser=0&pb=!1m8!1m3!1i'.$timespan['year'].'!2i'.$timespan['month'].'!3i'.$timespan['day'].'!2m3!1i'.$timespan['year'].'!2i'.$timespan['month'].'!3i'.$timespan['day']; 

    echo "<a href='".$path."'>link</a>"; 

Вы поймете, что вы можете скачивать файлы истории Kml для конкретных дат, которые вы можете легко создавать свои собственные данные. Проблема в том, что я не могу сделать это программно. Итак, если я пойду и открою свой браузер, он загрузит, но file_get_contents, например, конечно, не работает.

Я попытался использовать Postman's Inceptor для повторного отправки запроса, чтобы я мог программно его имитировать. Но я не смог отправить успешный запрос. Google отвечает на 400 страниц.

Есть ли способ поведения мнимого браузера, чтобы я мог загрузить файл?

ответ

0

запрос не через file_get_contents поскольку сервер Google требует вызова быть авторизован, то это может быть видно из рисунка ниже (Cookie заголовок содержит так называемые маркеры аутентификации, такие как HSID, SSID и SID)

enter image description here

Проверка подлинности токенов

Google использует Security cookies:

для аутентификации пользователей, предотвращения мошеннического использования учетных данных входа, и защиту пользовательских данных от посторонних лиц.

This python example (см. GetAuthTokens функция) демонстрирует, как получить токены аутентификации.

Пример

В следующем примере показано, как выполнить уполномоченный вызов, указав печенье безопасности:

$authTokens = array(
    'HSID' => '', 
    'SSID' => '', 
    'SID' => '', 
); 

$opts = array(
    'http'=>array(
     'method'=>"GET", 
     'header'=> 
      'Cookie: HSID=' . $authTokens["HSID"] . '; SSID=' . $authTokens["SSID"] . '; SID=' . $authTokens["SID"] 
    ) 
); 

$context = stream_context_create($opts); 
$content = file_get_contents($url,false, $context); 
Смежные вопросы