无法解析远程主机:

时间:2011-01-10 08:58:37

标签: c#

我有以下C#程序:

using System;
using System.IO;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceUri = "http://tinyurl.com/22m56h9";

            var request = WebRequest.Create(sourceUri);
            try
            {
                //Edit: request = WebRequest.Create(sourceUri);
                request.Method = "HEAD";

                var response = request.GetResponse();
                if (response != null)
                {
                    Console.WriteLine(request.GetResponse().ResponseUri);
                }
            }
            catch (Exception exception) {
                Console.WriteLine(exception.Message);                
            }
            Console.Read();
        }
    }    
}

如果运行我的程序,并且sourceUri =“http://tinyurl.com/22m56h9”正在进行,那么我只需获得tinyurl链接的目的地。
但是,如果我的程序运行tinyurl链接重定向到标记为恶意软件的网站,我的代码会抛出异常The remote host could not be resolved: '...'。我需要获取恶意软件链接的uri,因为我想创建一个应用程序来搜索某些测试链接并返回它们是否是恶意软件,如果链接被缩小(上面的情况),我需要知道在哪里正在重定向到。

所以我的问题是我在代码中做错了什么?或者,如果链接是重定向,是否有更好的测试方法? 提前谢谢

2 个答案:

答案 0 :(得分:2)

您应该尝试捕获WebException对象,而不是捕获常规异常。类似的东西:

try
{
    request.Method = "HEAD";

    var response = request.GetResponse();
    if (response != null)
    {
        Console.WriteLine(request.GetResponse().ResponseUri);
    }
}
catch (WebException webEx) {
    // Now you can access webEx.Response object that contains more info on the server response              
   if(webEx.Status == WebExceptionStatus.ProtocolError) {
        Console.WriteLine("Status Code : {0}", ((HttpWebResponse)webEx.Response).StatusCode);
        Console.WriteLine("Status Description : {0}", ((HttpWebResponse)webEx.Response).StatusDescription);
    }
}
catch (Exception exception) {
    Console.WriteLine(exception.Message);                
}

WebException包含一个Response对象,您可以访问该对象以查找有关服务器实际返回内容的更多信息。

答案 1 :(得分:1)

您可能对阅读服务器响应代码(HTTP标头)感兴趣。重定向通常由他们完成。

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection