Как проверить, изменился ли контент с ETags, PHP и CURL? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь оптимизировать свое приложение с помощью HTTP ETags, проверяющих , как это предлагается в документации Api (v3) Youtube.Другими словами, я хотел бы получить содержимое страницы json для ответа API, только если это содержимое было изменено с момента его последнего получения.

Для этой цели я попытался найти хороший способ выполнять запросы API с помощью CURL и "CURLOPT_HEADER => ['If-None-Match:"'. $ ETag. '"']"и приведенный выше возвращает заголовки, как и ожидалось.

Поскольку в моем приложении есть задание cron, которое проверяет наличие новых видео каждые x минут, я планирую сохранить ETag в своей базе данных и сравнить его с новым, который будетбудет дано в следующем ответе API, когда мой сервер будет проверять наличие нового содержимого.

Проблема в том, что ETags, поступающие от ответов API для одного и того же запроса, всегда обновляются (хотя содержимое всегда одинаковое), поэтому яникогда не получал ответ "304".

Вот мой код:

function curl_get_header($url, $eTag) {
    $curl = curl_init();
    curl_setopt_array($curl, Array(
        CURLOPT_URL             => $url,
        CURLOPT_FAILONERROR     => true,
        CURLOPT_HEADER          => ['If-None-Match: "'.$eTag.'"' ],
    ));
    $curl_exec = curl_exec($curl);
    if ($curl_exec === false) {
        $data = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    }
    else {
        $data = $curl_exec;
    }
    curl_close($curl);
    return $data;
}
$apikey = APIKEY;
$url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&fields=items(snippet(resourceId))&playlistId=UUvUxkykLglez3tO4vvHXDng&key='.$apikey;
$ETag = 'p4VTdlkQv3HQeTEaXgvLePAydmU/zfKv4GSLts0a-irOye2CCJiotAU';
curl_get_header($url, $ETag);

Так что мой вопрос: "Разве он не должен обновляться, только если содержимое изменилось?"Есть что-то, что я делаю неправильно или неправильно понято?

Заранее спасибо.

...