Delphi实现判断网址是否存在及是否可以打开的方法
通过TNMHTTP组件发送HTTPHEAD请求,判断网址是否可访问并区分多种状态:成功显示“网址正确”,失败提示“网址不正确”,同时识别主机名解析失败、需要验证、连接失败或重定向等场景,状态栏即时反馈具体结果。
检查一个网址到底能不能访问,是日常开发中经常会遇到的小需求。下面这个 Delphi 程序就是专门干这个的——它通过发送 HTTP HEAD 请求来判断目标网址是否真实存在,而不是简单地看页面返回了什么内容。不同情况对应不同的提示信息,一眼就能看出问题出在哪。

程序的核心思路并不复杂:在 TNMHTTP 组件上调用 Head 方法,然后通过一系列事件来捕获各种连接状态。比如,成功时会在状态栏显示“网址正确”,失败时则提示“网址不正确,没有这个页面”。比较贴心的是,它还区分了主机名解析失败、需要身份验证、连接失败、重定向等细节场景——这对调试非常有用。
具体实现上,主窗体放了一个输入框、一个按钮和一个状态栏,用户在编辑框里输入网址后点击按钮(或者直接按回车),程序就开始干活。事件处理涵盖了从“正在检验”到“连接到主机”再到最终结果的完整链路。如果网址被重定向了,状态栏会特别说明“重定向到其它页面”,而不是简单报错或成功,这可以避免误判。
以下是完整的代码,可以直接复制到 Delphi 里编译运行:
unit address;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Psock, NMHttp, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
NMHTTP1: TNMHTTP;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure NMHTTP1Success(Cmd: CmdType);
procedure NMHTTP1Failure(Cmd: CmdType);
procedure NMHTTP1HostResolved(Sender: TComponent);
procedure NMHTTP1InvalidHost(var Handled: Boolean);
procedure NMHTTP1AuthenticationNeeded(Sender: TObject);
procedure NMHTTP1Connect(Sender: TObject);
procedure NMHTTP1ConnectionFailed(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure NMHTTP1Redirect(var Handled: Boolean);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
url:string;
begin
url:=Edit1.Text;
StatusBar1.simpletext:='正在检验';
NMHTTP1.Head(url);
end;
procedure TForm1.NMHTTP1Success(Cmd: CmdType);
begin
case cmd of
CmdHEAD:
StatusBar1.SimpleText:='网址正确'
end;
end;
procedure TForm1.NMHTTP1Failure(Cmd: CmdType);
begin
case cmd of
CmdHEAD:
StatusBar1.SimpleText:='网址不正确,没有这个页面'
end;
end;
procedure TForm1.NMHTTP1HostResolved(Sender: TComponent);
begin
StatusBar1.SimpleText:='正确解析主机名';
end;
procedure TForm1.NMHTTP1InvalidHost(var Handled: Boolean);
begin
StatusBar1.SimpleText:='不能解析主机名';
end;
procedure TForm1.NMHTTP1AuthenticationNeeded(Sender: TObject);
begin
StatusBar1.SimpleText:='需要身份验证';
end;
procedure TForm1.NMHTTP1Connect(Sender: TObject);
begin
StatusBar1.SimpleText:='连接到主机';
end;
procedure TForm1.NMHTTP1ConnectionFailed(Sender: TObject);
begin
StatusBar1.SimpleText:='连接主机失败';
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Edit1.Text:='http://www.';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
NMHTTP1.Destroy;
end;
procedure TForm1.NMHTTP1Redirect(var Handled: Boolean);
begin
StatusBar1.SimpleText:='重定向到其它页面';
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
begin
StatusBar1.simpletext:='正在检验';
NMHTTP1.Head(Edit1.Text);
end;
end;
end.
有一点值得注意:程序启动时默认在输入框里填了 http://www.,这只是一个示例前缀,实际使用时替换成完整网址即可。另外,如果遇到需要身份验证的页面,状态栏也会明确提示,不会糊弄过去。整体来说,这个示例很实用,既适合快速验证 URL 是否有效,也能作为学习 TNMHTTP 组件用法的入门模板。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















