私は中国出身です。これは Delphi の THttpClient ライブラリに関する質問です。
Q&A
解決したいこと
ネットワークから切断されているときに要求をテストすると、System.Net.HttpClient ライブラリが例外をスローするのはなぜですか?しかし、ネットワークに再接続すると、例外がまだ発生しました。これにより、インターネットから切断された状態でリクエストを試行することになります。失敗した場合は、ネットワークに再接続したときにアプリケーションを再起動して正常に接続することしかできません。誰かこれを解決するのを手伝ってくれませんか?
発生している問題・エラー
code
unit HttpUnit;
interface
uses
System.Net.HttpClient, System.Net.URLClient, System.Types, System.SysUtils,
System.Classes;
type
THttp = class
public
class procedure DownloadToStream(const AUrl: string;
const AStream: TStream);
private
class var FClient: THTTPClient;
class var FRequest: IAsyncResult;
class procedure DoEndDownload(const AsyncResult: IAsyncResult);
end;
implementation
class procedure THttp.DownloadToStream(const AUrl: string;
const AStream: TStream);
begin
FClient := THTTPClient.Create;
try
// 发起异步请求并传递回调方法
FRequest := FClient.BeginGet(DoEndDownload, AUrl, AStream);
except
on E: Exception do
writeln('Error during request: ', E.Message);
end;
end;
class procedure THttp.DoEndDownload(const AsyncResult: IAsyncResult);
var
LAsyncResponse: IHTTPResponse;
begin
// 确保异步操作完成
try
writeln('Request received.');
LAsyncResponse := THTTPClient.EndAsyncHTTP(AsyncResult);
if AsyncResult.IsCancelled then
writeln('Download Canceled')
else
begin
writeln('Download Finished!');
writeln(Format('Status: %d - %s', [LAsyncResponse.StatusCode,
LAsyncResponse.StatusText]));
end;
except
on E: Exception do
begin
writeln('Error during asynchronous request: ', E.Message);
end;
end;
end;
end.
0