是否有人知道如何使用WebRequest类检查网页是否通过C#请求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 :(得分:4)
WebRequest.GetResponse
返回HttpWebResponse
类型的对象。只需投射它就可以检索StatusCode
。
但是,如果收到状态为4xx或5xx的回复,.Net会给你一个例外(感谢您的反馈)。 有一点解决方法,请查看:
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();
}
希望这有帮助。
此致
答案 1 :(得分:1)
可能想尝试
WebClient wc = new WebClient();
CredentialCache credCache = new CredentialCache();
如果您可以使用WebClient而不是WebRequest,那么它应该更高一些,更容易处理标题等。
另外,可能想检查一下这个帖子: System.Net.WebClient fails weirdly