2012-07-24 55 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

相关问题