2011-01-10 12 views
2

私は、次のC#のプログラムがあります。sourceUri = "http://tinyurl.com/22m56h9" everithingで、私のプログラムを実行するにはOKであればリモートホストは解決できませんでした:

 
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(); 
     } 
    }  
} 
 

を、私はちょうどtinyurlのリンク先を取得します。
しかし、マルウェアとマークされたサイトにリダイレクトするtinyurlリンクを使用しているプログラムを実行した場合、私のコードではThe remote host could not be resolved: '...'という例外がスローされます。マルウェアリンクのuriを取得する必要があります。なぜなら、マルウェアであるかどうかに関わらず、リンクとリターンのいくつかのテストを検索するアプリケーションを作成したいからです。リンクが縮小されている場合(上記のケース)にリダイレクトしています。

私のコードで何か間違っているのですか?またはリンクがリダイレクトであるかどうかをテストした方がよいでしょうか? ありがとうございます

+1

ただ、Webリクエストを 'Create'する必要はありません。 –

+0

良い発言。ありがとう – cristian

+0

それはそれです: '22m5.6h9'または' 22m56h9'? – leppie

答えて

2

。ような何か:

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

あなたは、サーバーの応答コード(HTTPヘッダー)を読むことに興味があります。リダイレクトは通常それらによって行われます。代わりに、あなたの代わりにWebExceptionオブジェクトをキャッチしようとする必要があり、一般的な例外をキャッチする

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

+0

リダイレクトはWebRequestによって処理されるため、中間リクエスト\応答が呼び出し元に公開されていないため、この作業が複雑になります。ちょうど頭と尾。 –

関連する問題