怎样检测某个URL是否能链接得通??(100分)

  • 主题发起人 主题发起人 lingym
  • 开始时间 开始时间
L

lingym

Unregistered / Unconfirmed
GUEST, unregistred user!
有几万个网址,要检测是否能链通,一个个用浏览器打开看太慢(我不管它什么内容,只想知道它会不会通),
想用程序检测,但不知怎么做

//这个问题在其他论坛也问过,没能解决,希望这里有大虾可以帮忙。。
 
ping它,如果ping通就返回真,把ping的通与不通的列表。
首先把网址建表,然后遍历网址表来ping,这就可以省去手工的麻烦
 
这要的办法不很好吧,
ping好像只能知道是不是与服务器连接上了,
但如果是Error 404之类的网页,
大约是ping的通的,算是链通网站了吗?
 
不能用ping的,关了ICMP就ping不通了。
而且正如大胃王说的,有的网站虽然ping得通,但具体的网页有的是不通的,,ping好象是检测不出来的
 
具体记不清楚了,可以这样吧:
用winsock,依据HTTP协议的HEAD方法,判断URL返回的内容。
 
nmhttp
replynumber=200 //ok
replynumber=404 //404
replynumber>200 //any problem
 
给楼上的占先了
 
hehe,,如果想知道那个网站还'活'着,只能是用楼上那位兄台的方法了,
 
给房客加分吧
 
我是菜鸟,不太明白。可以请详细一点吗?最好举个例子,谢谢。
 
抱歉,这两天没来
偶去试试,行了就来给分,谢谢大家
 
2 房客:

replynumber=200 //肯定都会通是吗?其它不等于200的都是不通的吗?
 
还有个问题,碰上自动转页(redirect)的情况怎么办?
比如,网易的个人主页如果某页不存在则自动跳转到www.163.com,这时用head取,
得到的是'host lookup failed'的错误信息,怎处理?
 
function IsEMail(EMail: String): Boolean;

var

s: String;

ETpos: Integer;

begin

ETpos:= pos('@'

EMail);

if ETpos > 1 then

begin

s:= copy(EMail

ETpos+1

Length(EMail));

if (pos('.'

s) > 1) and (pos('.'

s) < length(s)) then

Result:= true else Result:= false;

end

else

Result:= false;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

if isemail(Edit1.Text) then

begin

ShowMessage('Mail-Adresse!');

end;

end;

Web同理
 
可以这样:(Delphi6)

1.增加一个TNMHTTP控件:nmhttp1

2. nmhttp1.get('http://www.163.com/index.htm');

3. 增加nmhttp1CONNECT事件:说明成功

4. nmhttp1ConnectFailed:表示不成功






 
200在http中表示是正确的,
如果转向的话,一般是302,但按照http协议
如果页面没找到,应该返回404,163的不符合
标准的话,那就没办法了。(我跟了一下,确实返回了302)
只能判断连到的网址是不是www.163.com了。
 
多人接受答案了。
 

Similar threads

回复
0
查看
846
不得闲
回复
0
查看
801
不得闲
D
回复
0
查看
869
DelphiTeacher的专栏
D
D
回复
0
查看
928
DelphiTeacher的专栏
D
S
回复
0
查看
833
SUNSTONE的Delphi笔记
S
后退
顶部