我无法评论其他库,但 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
子句中,例如IdAuthentacationDigest
andIdAuthenticationNTLM
或IdAllAuthentications
unt,以使用 注册各个身份验证类TIdHTTP
,然后根据需要设置TIdHTTP.Request.UserName
andTIdHTTP.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.Compressor
TIdHTTP
Accept-Encoding
Transfer-Encoding
TIdHTTP
has OnWorkBegin
, OnWork
, 和OnWorkEnd
可用于进度条等的事件。该OnWorkBegin
事件有一个AWorkCountMax
参数,如果已知,则指定要传输的字节总数,否则将为 0(使用Content-Length
标头的 HTTP 响应将AWorkCountMax
相应地设置,但使用Transfer-Encoding: chunked
标头的 HTTP 响应不会)。该OnWork
事件有一个AWorkCount
参数,该参数指定到目前为止已传输了多少字节,而不管AWorkCounMax
值如何。