我想从HTTPS服务器下载文件的一部分。我使用了Idhttp和IdSSLIOHandlerSocketOpenSSL组件。使用TIdHTTP.Response.AcceptRanges属性似乎不起作用:它会下载整个文件。
如果我使用IdHTTP1.Head()和IdHTTP1.Response.AcceptRanges,我什么也得不回来:一个空字符串。
我做错了什么?
答案 0 :(得分:2)
TIdHTTP.Response.AcceptRanges
属性告诉您服务器是否接受给定URL的字节范围,在您请求URL之后。在请求URL时,您必须使用TIdHTTP.Request.Range(s)
属性实际指定范围。您可以使用TIdHTTP.Head()
检查AcceptRanges
值,然后使用带有或不带字节范围的TIdHTTP.Get()
请求实际的URL数据。
但是,如果在调用AcceptRanges
后TIdHTTP.Head()
属性为空,则服务器根本不支持该URL的字节范围,因此您别无选择,只能完整下载URL数据,只是丢弃你不想要的任何部分。您可以使用TIdEventStream
或覆盖虚拟TStream
方法的自定义派生TStream.Write()
类。这两种方法都允许您忽略正在下载的数据,只需跟踪正在写入的字节数和#34;到达您的流,忽略字节,直到达到所需的起始偏移量,然后根据需要保存剩余数据,直到达到所需的结束偏移量。