2017-03-15 4 views
0
static void Main() 
    { 
     Console.WriteLine("10504: " + TestURL("business.lynchburgchamber.org")); 
     Console.WriteLine("Google: " + TestURL("google.com")); 

     Console.ReadKey(); 
    } 

    static string TestURL(string baseURL) 
    { 
     try 
     { 
      string httpsURL = "https://" + baseURL; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpsURL); 
      return request.RequestUri.Scheme; 
     } 
     catch 
     { 
      string httpURL = "http://" + baseURL; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpURL); 
      return request.RequestUri.Scheme; 
     } 
    } 

私はURLがhttpかhttpsかを調べています。私の考えは、HttpWebRequestを使ってhttps要求が通過するかどうかをチェックし、失敗した場合はhttpを調べることでした。私の問題は、接続に失敗した場合に私のブラウザでhttps://business.lynchburgchamber.orgに行くと私のプログラムの私のWeb要求はhttpsを返します。誰もがこれを行うためのより良い方法がありますか?HttpWebRequest.RequestURI.Scheme常に「https」を返す

答えて

1

問題は、リクエストを発行していないということです。

だから、あなたが実際にしなければならないことはこれです:

static string TestURL(string baseURL) 
{ 
    try 
    { 
     string httpsURL = "https://" + baseURL; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpsURL); 
     request.Method = "GET"; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     return request.RequestUri.Scheme; 
    } 
    catch 
    { 
     string httpURL = "http://" + baseURL; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpURL); 
     //request.Method = "GET"; 
     //HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     return request.RequestUri.Scheme; 
    } 
} 

第二の発行も行うことができるが、私はあなたがサイトがhttpsを持っているかどうかを確認しようとしていると思うと、これは誤解を招くだろう。

ただし、インターネットに接続していない場合はhttpが返されますのでご注意ください。

0

あなたはURLからの応答を持っている場合、実際にチェックするためにRequest.GetResponseを追加します。

var rt=request.GetResponse(); 

本当に確かに、それは80それを返す場合、この後には、ポート

rt.ResponseUri.Port 

を確認することができますHTTPSの場合は443、HTTPSの場合は443です。

関連する問題