通过IdHTTP和IdSSLIOHandlerSocketOpenSSL1读取并保存部分文件流

时间:2017-05-16 13:59:00

标签: ssl delphi-7 indy idhttp

我想从HTTPS服务器下载文件的一部分。我使用了Idhttp和IdSSLIOHandlerSocketOpenSSL组件。使用TIdHTTP.Response.AcceptRanges属性似乎不起作用:它会下载整个文件。

如果我使用IdHTTP1.Head()和IdHTTP1.Response.AcceptRanges,我什么也得不回来:一个空字符串。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

TIdHTTP.Response.AcceptRanges属性告诉您服务器是否接受给定URL的字节范围,在您请求URL之后。在请求URL时,您必须使用TIdHTTP.Request.Range(s)属性实际指定范围。您可以使用TIdHTTP.Head()检查AcceptRanges值,然后使用带有或不带字节范围的TIdHTTP.Get()请求实际的URL数据。

但是,如果在调用AcceptRangesTIdHTTP.Head()属性为空,则服务器根本不支持该URL的字节范围,因此您别无选择,只能完整下载URL数据,只是丢弃你不想要的任何部分。您可以使用TIdEventStream或覆盖虚拟TStream方法的自定义派生TStream.Write()类。这两种方法都允许您忽略正在下载的数据,只需跟踪正在写入的字节数和#34;到达您的流,忽略字节,直到达到所需的起始偏移量,然后根据需要保存剩余数据,直到达到所需的结束偏移量。