Как скачать файл KML от Google

Я знаю, что в этой ссылке 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 Inceptor для повторной отправки запроса, чтобы я мог программно имитировать его. Но мне не удалось отправить успешный запрос. Google отвечает 400 страницей.

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


person Süha Boncukçu    schedule 26.11.2016    source источник


Ответы (1)


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

введите здесь описание изображения

О токенах аутентификации

Google использует файлы cookie безопасности:

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

В этом примере Python (см. функцию GetAuthTokens) показано, как получить маркеры аутентификации.

Пример

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

$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);
person Vadim Gremyachev    schedule 30.11.2016