利用WebRequest判断一个Url是否有效,有答案就结贴
假如我要判断一个Url是不是存在
private bool UrlIsValid(string url)
{
try
{
HttpWebRequest myRequest = (HttpWebRequest)System.Net.WebRequest.Create(url);
myRequest.Method = "HEAD ";
myRequest.Timeout = 100;
HttpWebResponse res = (HttpWebResponse)myRequest.GetResponse();
return (res.StatusCode == HttpStatusCode.OK);
}
catch (WebException we)
{
System.Diagnostics.Trace.Write(we.Message);
return false;
}
}
我在调用这个方法时
if (urlIsValid(this.textBox1.Text))
{
MessageBox.Show( "有效的链接 ");
}
else
{
MessageBox.Show( "无效的链接 ");
}
只调用1次或2次,都可以返回值,但到了第3次以后,就得不到任何返回值了。
我查了一下资料,说要用异步方法“BeginGetResponse”和“EndGetResponse”来操作。
但具体怎么写我还是不太清楚,请教各位一下,谢谢~
[解决办法]
查看头里的状态代码 200 400 500
[解决办法]
private void Page_Load(object sender, System.EventArgs e)
{
string url1 = http://dotnet.aspx.cc/;
string url2 = http://dotnet.aspx.cc/Images/logo.gif;
Response.Write( <li> 方法1:);
Response.Write(url1 + 存在: + UrlExistsUsingHttpWebRequest(url1).ToString());
Response.Write( <li> 方法2:);
Response.Write(url1 + 存在: + UrlExistsUsingSockets(url1).ToString());
Response.Write( <li> 方法3:);
Response.Write(url1 + 存在: + UrlExistsUsingXmlHttp(url1).ToString());
Response.Write( <li> 方法1:);
Response.Write(url2 + 存在: + UrlExistsUsingHttpWebRequest(url2).ToString());
Response.Write( <li> 方法3:);
Response.Write(url2 + 存在: + UrlExistsUsingXmlHttp(url2).ToString());
}
private bool UrlExistsUsingHttpWebRequest(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;
}
}
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 );
}
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;
}
}