上篇的验证URL的方法在效率上有些弊端,今天在介绍几种方法:
第一种,使用HttpWebRequest,将验证的方式制定为:“HEAD”
public bool ConfirmUrlUsingHttpWebRequest(string url) { try { System.Net.HttpWebRequest myRequest =(System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); myRequest.Method = "HEAD"; myRequest.Timeout = 100; System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)myRequest.GetResponse(); return (res.StatusCode == System.Net.HttpStatusCode.OK); } catch(System.Net.WebException we) { System.Diagnostics.Trace.Write(we.Message); return false; } }
第二种,使用XmlHttp
private bool UrlExistsUsingXmlHttp(string url) { //注意:此方法需要引用Msxml2.dll MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass(); _xmlhttp.open("HEAD",url,false,null,null); _xmlhttp.send(""); return (_xmlhttp.status == 200 ); }
第三种,使用Scoket(这个方法不可以验证图片或文件的URL,可以验证域名)
private bool UrlExistsUsingSockets(string url) { if(url.StartsWith("http://")) url = url.Remove(0,"http://".Length); try { System.Net.IPHostEntry ipHost = System.Net.Dns.Resolve(url); return true; } catch (System.Net.Sockets.SocketException se) { System.Diagnostics.Trace.Write(se.Message); return false; } }
第四种,使用Uri类,这种方法执行速率最快
public bool ConfirmImgUrlUri(string ImgUrl) { try { Uri myUri = new Uri(ImgUrl);//通过创建的实例来判断,如果指定的URL无效,则执行构造函数时会报错 return true; } catch { return false; } }
这几种方法去验证URL在效率方面比较快。