如何为位于Http Url中的文件生成MD5哈希?

6
我正在编写一个网络爬虫来搜索文件并下载。我的问题是,我不想下载已经下载到本地驱动器的相同文件。我知道可以使用MD5哈希进行比较,但如何在不将它们下载到本地磁盘的情况下对HTTP URL执行此操作?
如果这种方法不正确,请提供更好的解决方案。
4个回答

11

除非Web服务器有一些共享MD5的服务,否则不行。

计算文件哈希需要文件中的每个字节。这就是为什么更改单个字节会更改哈希,以防止获取已修改的文件。


3
要生成哈希值,您需要数据(即,您需要以某种方式下载它)。
我建议您考虑使用If-Modified-Since HTTP头(或者如果特定服务器提供,则可以使用ETag/If-None-Match)。

0

虽然这是一个老问题,但PowerShell 5+可以帮助通过自动下载远程Url文件作为字节流来获取MD5,然后在一步中计算MD5:

$wc = [System.Net.WebClient]::new()
$pkgurl = 'http://www.remoteurl/file.zip'
$FileHash = Get-FileHash -Algorithm MD5 -InputStream ($wc.OpenRead($pkgurl)) 
write-host $FileHash.Hash 

0

你只能对远程文件进行大小比较。不幸的是,这可能不足以确定内容是否相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接