2013-02-27 22 views
0

我有文本框(多行)从那我想发送Web请求到所有链接检查链接是否工作或没有如果然后不工作的错误消息如何发送网络请求来检查链接是否链接是否损坏

string strLink = TextBox1.Text; 
WebResponse objResponse; 
WebRequest objRequest = System.Net.HttpWebRequest.Create(strLink); 

objResponse = objRequest.GetResponse(); 
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) 
{ 
    strLink = sr.ReadToEnd(); 
    sr.Close(); 
} 
strLink = strLink.Replace("<form id='form1' method='post' action=''>", ""); 
strLink = strLink.Replace("</form>", ""); 
//strResult = strResult.Replace("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /><html xmlns="http://www.w3.org/1999/xhtml">"); 
div.InnerHtml = TextBox1.Text; 
+0

你为什么这样做'strLink = sr.ReadToEnd( )'? – 2013-02-27 06:18:42

+0

以结束字符串 – hitarth 2013-02-27 06:53:55

+0

的读取,但是'strLink'将包含包含所有链接的大文本。首先,你不是从文本中解析每个链接。我最后一条评论的意思是,你将HTML文本分配给你的第一个URL返回(假设你调用了它),这个变量根本没有意义。 – 2013-02-27 07:03:52

回答

3

除非我误解你了,你可以做这样的事情:

var links = textBox1.Text.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); 
foreach (var link in links) { 
    if (!IsLinkWorking(link)) { 
     //Here you can show the error. You don't specify how you want to show it. 
     textBox2.Text += string.Format("Link {0} not working\n", link); 
    } 
} 

bool IsLinkWorking(string url) { 
    HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(url); 

    //You can set some parameters in the "request" object... 
    request.AllowAutoRedirect = true; 

    try { 
     HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
     return true; 
    } catch { //TODO: Check for the right exception here 
     return false; 
    } 
} 

假设你在textBox1这样的事情有:

http://www.stackoverflow.com/
http://www.invalid-page.com/
http://www.invalid.again.com/120938213

你会最终在textBox2以下文字:

链接http://www.invalid-page.com/不工作
链接http://www.invalid.again.com/120938213不工作

+0

谢谢我正在执行此代码 – hitarth 2013-02-27 06:11:40

+0

@ user2071502请参阅我的编辑。 – 2013-02-27 06:13:26

+0

对不起兄弟不工作,因为我想,我希望我有链接在textbox1的列表,并从那我想发送webrequest每个人然后检查链接是否损坏或不是如果损坏然后发送特定的错误信息,所有将有在文本框中显示 – hitarth 2013-02-27 06:47:10

0

您可以使用HttpWebResponse状态波纹管:

HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); 
if (objResponse.StatusCode == HttpStatusCode.OK) 
{ 
    // put your code when link is valid. 
} 

你也可以把代码中的try catch内捕捉一些例外,例如,连接故障等

+0

这将无法正常工作。如果该网站返回一个'(404)Not Found'错误,它将在第一行失败。 – 2013-02-27 06:13:56

+0

yu可以放在里面试试catch来处理异常。 – Habibillah 2013-02-27 06:16:57

+0

对不起兄弟不工作,因为我想,我希望我有链接在textbox1的列表,并从那我想发送webrequest每个人然后检查链接是否损坏或不是如果损坏,然后发送特定的错误信息,所有将有在textbox2中显示 – hitarth 2013-02-27 06:43:01