我无法评论其他库,但 Indy 支持您所要求的一切。
如果服务器支持,该TIdHTTP组件可以使用字节范围下载文件。您可以使用该TIdHTTP.Head()方法检查服务器是否返回Accept-Ranges: bytes给定 URL 的标头。如果是这样,那么您可以在从该 URL 下载数据时根据需要将TIdHTTP.Request.ContentRangeStart和TIdHTTP.Request.ContentRangeEnd属性设置为所需的字节偏移量。要同时下载资源的多个部分,只需并行运行多个线程,每个线程都有自己的TIdHTTP组件。然后,您必须下载多个片段以分隔临时文件,然后在完成后将它们合并到最终文件中,或者创建一个预先确定大小的文件,然后TFileStream在所需的起始偏移量处打开多个对象以TIdHTTP写入.
TIdHTTP支持cookies。您可以将TIdCookieManager组件分配给TIdHTTP.CookieManager属性,也可以将其保留为未分配并在内部TIdHTTP创建一个TIdCookieManager对象。无论哪种方式,还要将该TIdHTTP.AllowCookies属性设置为 True。
网站登录可以通过两种不同的方式之一完成,具体取决于服务器是使用基于 HTTP 的身份验证还是基于 WebForm 的身份验证:
对于 HTTP 身份验证,将所需IdAuthentication...的单元添加到您的uses子句中,例如IdAuthentacationDigestandIdAuthenticationNTLM或IdAllAuthenticationsunt,以使用 注册各个身份验证类TIdHTTP,然后根据需要设置TIdHTTP.Request.UserNameandTIdHTTP.Request.Password属性。如果 WebServer 在请求期间要求进行身份验证,TIdHTTP将选择适当的类并使用它使用指定的凭据登录。如果服务器拒绝凭据,TIdHTTP.OnAuthorization将触发该事件,让您有机会更改凭据并重试。
对于 WebForm 身份验证,有一个TIdMultipartFormDataStream类可以传递给TIdHTTP.Post()发布multipart/form-data格式化 POST 请求的方法。
TIdHTTP在 Indy 10 中支持 gzip 文件和 deflate 压缩文件(TIdHTTP在 Iny 9 和更早版本中不支持压缩)。您可以为该属性分配一个TIdZLibCompressorBase衍生组件,例如TIdCompressorZLib,并将为您处理所有细节,包括发送适当的请求标头和检查服务器的响应标头。TIdHTTP.CompressorTIdHTTPAccept-EncodingTransfer-Encoding
TIdHTTPhas OnWorkBegin, OnWork, 和OnWorkEnd可用于进度条等的事件。该OnWorkBegin事件有一个AWorkCountMax参数,如果已知,则指定要传输的字节总数,否则将为 0(使用Content-Length标头的 HTTP 响应将AWorkCountMax相应地设置,但使用Transfer-Encoding: chunked标头的 HTTP 响应不会)。该OnWork事件有一个AWorkCount参数,该参数指定到目前为止已传输了多少字节,而不管AWorkCounMax值如何。