сравнить md5sum файла в сети и локально загруженный файл - PullRequest
1 голос
/ 14 июня 2019

Стоит ли ожидать, что эти md5sums будут одинаковыми?

url = 'http://stackoverflow.com/opensearch.xml'
shl = paste0('curl -s ', url, '|md5sum')
shell(shl, intern = T)
#"1dbeef7406e5054197382916ff72e29b *-"

fl = 'temp.xml'
download.file(url = url, destfile = fl, mode = 'wb')
tools::md5sum(fl)
#"96bdf6d80c0bb6e27620079e2f6f7237" 

Если нет, то возможно ли вообще сравнение таких файлов?

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

ОБНОВЛЕНИЕ:

url = 'https://www.ncl.ucar.edu/Applications/Data/bin/latlon.bin'
shl = paste0('curl -sL ', url, '|md5sum')
shell(shl, intern = T)
#"d41d8cd98f00b204e9800998ecf8427e *-"

fl = 'temp'
download.file(url = url, destfile = fl, mode = 'wb')
tools::md5sum(fl)
#"1a1eeb7a09418f047588148395096b91" 

Кажется, он возвращает разные значения md5, если файл .bin

1 Ответ

3 голосов
/ 14 июня 2019

Вы сравниваете два разных файла - curl автоматически не следует за перенаправлениями

curl -i http://stackoverflow.com/opensearch.xml                                                                                                                                    [13:00:20]
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/opensearch.xml
X-Request-Guid: 99819f8c-f481-4295-b527-f586b9e27d22
Content-Security-Policy: upgrade-insecure-requests; frame-ancestors 'self'
Accept-Ranges: bytes
Age: 0
Content-Length: 157
Accept-Ranges: bytes
Date: Fri, 14 Jun 2019 17:00:23 GMT
Via: 1.1 varnish
Age: 0
Connection: keep-alive
X-Served-By: cache-lga21947-LGA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1560531623.276827,VS0,VE3
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=48b775d0-60fb-3f52-5066-61fe6fab27ca; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="https://stackoverflow.com/opensearch.xml">here</a>.</h2>
</body></html>

Используйте -L, чтобы следовать за перенаправлением:

curl -sL http://stackoverflow.com/opensearch.xml | md5                                                                                                                             [13:00:23]
96bdf6d80c0bb6e27620079e2f6f7237
...