2012-07-24 96 views
2

有誰知道如何檢查網頁是否要求通過C#使用WebRequest類進行HTTP身份驗證?我不問如何發佈憑證到頁面,只是如何檢查頁面是否要求驗證。C#WebRequest檢查頁面是否需要HTTP身份驗證

當前片段獲得HTML:

WebRequest wrq = WebRequest.Create(address); 
wrs = wrq.GetResponse(); 
Uri uri = wrs.ResponseUri; 
StreamReader strdr = new StreamReader(wrs.GetResponseStream()); 
string html = strdr.ReadToEnd(); 
wrs.Close(); 
strdr.Close(); 
return html; 

PHP服務器端源:

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="Secure Sign-in"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 
+0

後續行動:做過的任何答案對您有幫助嗎?如果是這樣,請標記爲正確 – 2012-07-24 19:55:28

回答

4

WebRequest.GetResponse返回HttpWebResponse類型的對象。只要投它,你就可以檢索StatusCode

但是,.Net會給你一個例外,如果它收到狀態4xx或5xx的響應(感謝您的反饋)。 有一點點的解決方法,檢查出來:

HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(@"http://webstrand.comoj.com/locked/safe.php"); 
    HttpWebResponse wrs = null; 

    try 
    { 
     wrs = (HttpWebResponse)wrq.GetResponse(); 
    } 
    catch (System.Net.WebException protocolError) 
    { 
     if (((HttpWebResponse)protocolError.Response).StatusCode == HttpStatusCode.Unauthorized) 
     { 
      //do something 
     } 
    } 
    catch (System.Exception generalError) 
    { 
     //run to the hills 
    } 

    if (wrs.StatusCode == HttpStatusCode.OK) 
    { 
     Uri uri = wrs.ResponseUri; 
     StreamReader strdr = new StreamReader(wrs.GetResponseStream()); 

     string html = strdr.ReadToEnd(); 
     wrs.Close(); 
     strdr.Close(); 
    } 

希望這有助於。

Regards

+0

與此相關的主要問題是,一旦它觸及下面的行,就會拋出一個WebException「協議錯誤」,不允許我從中獲取任何內容。 「wrs = wrq.GetResponse();」留下空讓我不能從它得到任何信息。 – CoderWalker 2012-07-27 02:21:07

+0

對不起:您在調用'wrq.GetResponse()'時會遇到異常? – 2012-07-27 03:10:25

+0

正確。訪問需要憑證的頁面時出現「協議錯誤」。 – CoderWalker 2012-07-27 03:14:29

1

可能想嘗試

WebClient wc = new WebClient(); 
CredentialCache credCache = new CredentialCache(); 

如果你可以用Web客戶端而不是WebRequest的工作,你應該有更高的水平,更容易處理標題等。

而且,可能要檢查這個線程: System.Net.WebClient fails weirdly

相關問題