怎样检测一个网址或EMail是否有效?注:不是检查字面上拼写哦,而是要检查目标是否真实存在 1.如我有一个URL列表(假设拼写都是正确的),怎样检查一个URL是否存在?如是否有该网页文件,或是否存在该服务器,有没有较好的方法进行检查?2.同理,如果列表是EMail地址(假设拼写都是正确的),又该如何检查呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/songfuqiang/archive/2007/07/04/1678462.aspx检查一个 URL 是否有效函数 貌似有个 InternetOpen的函数可用于判断。 检测EMAIL比较难没有办法直接从返回的消息当中获得EMAIL是否存在的信息 这个函数将会检查URL是否有效。唯一的先决条件就是你必须在线。 URL前可能有 http:// 前缀,却省情况也是 http:// 作前缀,函数 internetOpenUrl 对 FTP:// 和 gopher:// 前缀均提供支持。 例子中我检查返回代码是否为 '200' 和 '302'(重定位标记),你也可以按你的需要修改返回码. 仅修改 the result := 表达式 这句即可. uses wininet; Function CheckUrl(url:string):boolean; var hSession, hfile, hRequest: hInternet; dwindex,dwcodelen :dword; dwcode:array[1..20] of char; res : pchar; begin if pos('http://',lowercase(url))=0 then url := 'http://'+url; Result := false; hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0); if assigned(hsession) then begin hfile := InternetOpenUrl(hsession,pchar(url),nil,0,INTERNET_FLAG_RELOAD,0); dwIndex := 0; dwCodeLen := 10; HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,@dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); result:= (res ='200') or (res ='302'); if assigned(hfile) then InternetCloseHandle(hfile); InternetCloseHandle(hsession); end; end; 第一个访问下就可以了可以用HEAD请求. 数据量 也不大.至于email你可以发一封空邮件,看看会不会被退.时效性比较低. 沒什麼好辦法,不然早就有人用了。如果都是POP的服務器還在存那倒好辦了,就怕存在的服務器,無此用戶。 返回這個錯誤可能是一天,二天這個效率太低了。只能做到部分檢查。 比如提取域名檢查主機是否存在。格式合法,至於用戶是否存在,難。 aawwmate 兄的函数与bdmh 提供连接页面内的函数1相同,经试验:bdmh的方法2的函数优于方法1的,方法1不够准确,例如URL是:http://www.google.cn/search?hl=zh-CN&q=delphi&meta=&aq=f&oq=方法是检测不到的,方法2可以,具体还要多选一些URL试试不知检测Email有没有可行的方法? email检测的效率太低了,不好实现啊! BPL问题 动态 ADOQUERY 可以重建索引吗,怎样最快? ora-01017错误 急 请问哪儿能下载到delphi6开发指南附书的光盘? 请教在FastReport中预览时设置页面纸型或者页面距离同步于要打印的页面?(在线...) 求将图片填充50%透明白色方法 哪一个API函数可以让文件夹拥有系统属性? 怎样把字段自动提取GETDATE函数,ms sql数据库 过虑出某一字段的某一位,在线等待 SOS~ 求Delphi ACM组件 delphi和SQLSERVER2000的简单问题
检查一个 URL 是否有效函数
没有办法直接从返回的消息当中获得EMAIL是否存在的信息
URL前可能有 http:// 前缀,却省情况也是 http:// 作前缀,函数
internetOpenUrl 对 FTP:// 和 gopher:// 前缀均提供支持。
例子中我检查返回代码是否为 '200' 和 '302'(重定位标记),
你也可以按你的需要修改返回码. 仅修改 the result := 表达式 这句即可.
uses wininet;
Function CheckUrl(url:string):boolean;
var hSession, hfile, hRequest: hInternet;
dwindex,dwcodelen :dword;
dwcode:array[1..20] of char;
res : pchar;
begin
if pos('http://',lowercase(url))=0 then
url := 'http://'+url;
Result := false;
hSession := InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if assigned(hsession) then
begin
hfile := InternetOpenUrl(hsession,pchar(url),nil,0,INTERNET_FLAG_RELOAD,0);
dwIndex := 0;
dwCodeLen := 10;
HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE,@dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
result:= (res ='200') or (res ='302');
if assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
沒什麼好辦法,不然早就有人用了。
如果都是POP的服務器還在存那倒好辦了,就怕存在的服務器,無此用戶。 返回這個錯誤可能是一天,二天這個效率太低了。只能做到部分檢查。 比如提取域名檢查主機是否存在。格式合法,至於用戶是否存在,難。
方法是检测不到的,方法2可以,具体还要多选一些URL试试不知检测Email有没有可行的方法?