MD5 HASH ONLINE DELPHI

Добрый день.
Я использую idhttp в моем приложении Delphi.

Интересно, если это возможно, я получаю MD5 хеш файла онлайн:

например

idhttp.get (‘http.onedrive.com/arquive.rar’);

Можно ли вернуть MD5 файла перед загрузкой … или сразу после загрузки можно проверить MD5?

Ибо в php … я использую get_headers, который возвращает некоторые данные enteressantes как Content-MD5 … но почти любой файл принадлежит этому заголовку …

Пример php:

<?php $url = 'https://download3.vmware.com/software/player/file/VMware-player-6.0.4-2249910.exe';
echo '<pre>';
print_r(get_headers($url));

print_r(get_headers($url, 1));

?>Array
(
[0] => HTTP/1.0 200 OK
[Server] => Apache
[ETag] => "df0743bf13519b6c461d50fac0fa0ded:1414635035"[Content-MD5] => 3wdDvxNRm2xGHVD6wPoN7Q==
[Last-Modified] => Thu, 30 Oct 2014 02:10:35 GMT
[Accept-Ranges] => bytes
[Content-Length] => 98906456
[Date] => Tue, 25 Nov 2014 19:11:28 GMT
[Connection] => close
[Content-Disposition] => attachment; filename="VMware-player-6.0.4-2249910.exe"[Content-Type] => application/x-octet-stream
)

Я могу использовать этот заголовок ETag, чтобы увидеть, идентичен ли файл? Но как поймать это с DELPHI ??

  [ETag] => «df0743bf13519b6c461d50fac0fa0ded: 1414635035»

0

Решение

Ты можешь использовать TIdHTTP.Head() получить только заголовки файла, не загружая сам файл, или вы можете использовать TIdHTTP.Get() загрузить файл и получить его заголовки одновременно. Любой метод заполняет TIdHTTP.Response подсвойства соответственно.

ETag заголовок (который вы можете прочитать из TIdHTTP.Response.ETag свойство) позволяет определить, был ли файл изменен на сервере. Когда вы загружаете файл, вы можете сохранить его ETag значение также, если один был предоставлен. Затем вы можете использовать это значение позже, чтобы проверить, был ли файл на стороне сервера изменен с момента последней загрузки.

HTTP имеет функцию для этой цели под названием Условный GET. Если вы отправите GET запрос с If-None-Match заголовок (вы можете использовать TIdHTTP.Request.CustomHeaders свойство для этого) с указанием ETag у вас уже есть, сервер может отправить вам 304 Not Modified ответ, если на стороне сервера ETag по-прежнему соответствует этому значению, поэтому вы знаете, что ваша копия файла обновлена, и сервер не тратит время и трафик, пытаясь отправить файл снова.

В вашем примере. файл также имеет Content-MD5 заголовок. Это позволяет вам убедиться, что загружаемый вами файл не был изменен / поврежден в процессе загрузки. Вы можете использовать TIdHTTP.Response.RawHeaders.Values['Content-MD5'] свойство, чтобы прочитать это значение, используйте TIdDecoderMIME класс для декодирования значения в байты (он закодирован в base64) и использование TIdHashMessageDigest5 класс для вычисления MD5-хэша вашего локального / загруженного файла и сравнения его с Content-MD5 хэш.

5

Другие решения

Да. ETag используются для кеширования. Этот конкретный использует MD5 и метку времени, но в документации PHP вы также можете найти etags, такие как 3f80f-1b6-3e1cb03b, df0743bf13519b6c461d50fac0fa0ded строка, которую вы видите впереди, является MD5 файла, где 1414635035 UNIX-метка даты последней модификации файла.

Введите номер в конце на сайте, например, этот сайт и вы увидите, что дата выхода равна значению «Last-Modified».

1

Вы можете использовать запрос Главы, чтобы получить информацию заранее:

var
ETag: string;

idhttp.head ('http.onedrive.com/arquive.rar');
ETag := idhttp.Response.ETag;
1
По вопросам рекламы [email protected]