4

Synapse、Indy、ICS を試しましたが、満足できません。複数のファイルを複数の部分に分けて同時にダウンロードし、再開、gzip でエンコードされたファイル、Cookie、POST を使用した Web サイトへのログ記録などをサポートしたいと考えています。だから私はソケットで書き込むだけだと思います。しかし、Delphi には、TTcpClient、TRawSocket、TCGIRequest、TClientSocket などのソケットがたくさんあります。それらはすべて文書化されておらず、使用例を見つけるのは非常に困難です。TTcpClient を使用してみましたが、時々プログラムがフリーズしてタイムアウトになり、その理由がわかりません。応答を待っている間に問題が発生したようです。私はローカルホストでテストしているので、これはサーバーの問題ではありません。HTTP プロトコルを使用するのに最適なソケットは何ですか? 使いやすいもの?

Delphi 7 と XE2 の両方で使用したい。WinAPI のようなものは使いたくないので、PChars やその他の Delphi 以外のものを扱う必要はありません。

私は次のようなことを考えています:

1)私が望んでいることを正確に実行します-同じファイルに多くのファイルのプログレスバーを含む複数の部分をダウンロードします

また

2) telnet のようなもの - HTTP コマンドを文字列として記述するだけで、文字列に変換するか、tstream に保存できるバイト配列を取得します。

4

1 に答える 1

8

他のライブラリについてコメントすることはできませんが、Indy はあなたが求めるものすべてをサポートしています。

サーバーがサポートしている場合、TIdHTTPコンポーネントはバイト範囲を使用してファイルをダウンロードできます。このメソッドを使用して、サーバーが特定の URL のヘッダーをTIdHTTP.Head()返すかどうかを確認できます。Accept-Ranges: bytesその場合は、その URL からデータをダウンロードするときに、必要に応じてTIdHTTP.Request.ContentRangeStartおよびTIdHTTP.Request.ContentRangeEndプロパティを目的のバイト オフセットに設定できます。リソースの複数の部分を同時にダウンロードするには、それぞれが独自のTIdHTTPコンポーネントを持つ複数のスレッドを並行して実行するだけです。次に、複数の部分をダウンロードして一時ファイルを分離し、終了時にそれらを最終ファイルにマージするか、事前にサイズ設定された単一のファイルを作成してから、書き込み先TFileStreamの開始オフセットで複数のオブジェクトを開く必要があります。 TIdHTTP.

TIdHTTPクッキーをサポートします。TIdCookieManagerコンポーネントをTIdHTTP.CookieManagerプロパティに割り当てることも、未割り当てのままにして内部でオブジェクトTIdHTTPを作成することもできます。TIdCookieManagerどちらの方法でも、TIdHTTP.AllowCookiesプロパティを True に設定します。

Web サイトへのログインは、サーバーが HTTP ベースの認証と WebForm ベースの認証のどちらを使用しているかに応じて、2 つの異なる方法のいずれかで実行されます。

  1. HTTP 認証の場合、 andやuntなどの目的のIdAuthentication...ユニットをuses句に追加して、個々の認証クラスを に登録し、必要に応じておよびプロパティを設定します。WebServer がリクエスト中に認証を要求した場合、は適切なクラスを選択し、それを使用して指定された資格情報でログインします。サーバーが資格情報を拒否すると、資格情報を変更して再試行する機会を与えるために、イベントが発生します。IdAuthentacationDigestIdAuthenticationNTLMIdAllAuthenticationsTIdHTTPTIdHTTP.Request.UserNameTIdHTTP.Request.PasswordTIdHTTPTIdHTTP.OnAuthorization

  2. WebForm 認証の場合、フォーマットされた POST リクエストをポストするメソッドにTIdMultipartFormDataStream渡すことができるクラスがあります。TIdHTTP.Post()multipart/form-data

TIdHTTPIndy 10 では gzip ファイルと deflate 圧縮ファイルをサポートしています ( TIdHTTPIny 9 以前では圧縮をサポートしていません)。TIdZLibCompressorBaseなどの派生コンポーネントをTIdCompressorZLibプロパティTIdHTTP.Compressorに割り当てることができ、適切な要求ヘッダーの送信やサーバーの応答ヘッダーの確認TIdHTTPなど、すべての詳細を処理します。Accept-EncodingTransfer-Encoding

TIdHTTPOnWorkBeginOnWork、およびOnWorkEnd進行状況バーなどに使用できるイベントがあります。OnWorkBeginイベントには、既知の場合は転送される合計バイト数を指定するパラメーターAWorkCountMaxがあり、それ以外の場合は 0 になります (ヘッダーを使用する HTTP 応答はそれに応じてContent-Length設定されますが、ヘッダーを使用する HTTP 応答は設定されません)。イベントには、値に関係なく、これまでに転送されたバイト数を指定するパラメーターがあります。AWorkCountMaxTransfer-Encoding: chunkedOnWorkAWorkCountAWorkCounMax

于 2013-02-08T23:26:00.777 に答える