gpt4 book ai didi

delphi - IdHttp 只需获取响应代码

转载 作者:行者123 更新时间:2023-12-03 14:40:58 28 4
gpt4 key购买 nike

我正在使用 idhttp (Indy) 进行一些网站检查。我想要它做的就是在发送请求后检查服务器的响应代码,我不想实际上必须从服务器接收 HTML 输出,因为我只监视 200 OK 代码,任何其他代码意味着存在某种形式的问题。

我查阅了 idhttp 帮助文档,我认为可能做到这一点的唯一方法是将代码分配给 MemoryStream,然后立即清除它,但这不是'效率不高并且使用不需要的内存。有没有一种方法可以只调用站点并获取响应,但忽略发回的 HTML,这样更有效且不浪费内存?

目前代码看起来像这样。然而,这只是我尚未测试的示例代码,我只是用它来解释我想要做什么。

Procedure Button1Click(Sender: TObject);

var
http : TIdHttp;
s : TStream;
url : string;
code : integer;

begin

s := TStream.Create();
http := Tidhttp.create();
url := 'http://www.WEBSITE.com';

try

http.get(url,s);
code := http.ResponseCode;
ShowMessage(IntToStr(code));

finally

s.Free();
http.Free();

end;

最佳答案

TIdHTTP.Head() 是最好的选择。

但是,作为替代方案,在最新版本中,您可以使用 nil 目标 TStream 调用 TIdHTTP.Get(),或者未分配事件处理程序的 TIdEventStream,并且 TIdHTTP 仍会读取服务器的数据,但不会将其存储在任何地方。

无论哪种方式,还要记住,如果服务器发回失败响应代码,TIdHTTP 将引发异常(除非您使用 AIgnoreReplies 参数指定特定的您有兴趣忽略的响应代码值),因此您也应该考虑到这一点,例如:

procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
try
http.Head(url);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode; // or: code := E.ErrorCode;
end;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;

procedure Button2Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
try
http.Get(url, nil);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode; // or: code := E.ErrorCode;
end;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;

更新:为了避免在失败时引发 EIdHTTPProtocolException,您可以在 TIdHTTP.HTTPOptions 属性中启用 hoNoProtocolErrorException 标志:

procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
http.HTTPOptions := http.HTTPOptions + [hoNoProtocolErrorException];
http.Head(url);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;

procedure Button2Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
http.HTTPOptions := http.HTTPOptions + [hoNoProtocolErrorException];
http.Get(url, nil);
code := http.ResponseCode;
ShowMessage(IntToStr(code));
finally
http.Free;
end;
end;

关于delphi - IdHttp 只需获取响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962096/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com