gpt4 book ai didi

C# WebRequest 检查页面是否需要 HTTP 身份验证

转载 作者:行者123 更新时间:2023-12-02 05:36:27 24 4
gpt4 key购买 nike

有谁知道如何使用 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>";
}
?>

最佳答案

WebRequest.GetResponse 返回类型为 HttpWebResponse 的对象。只需转换它,您就可以检索 StatusCode

但是,如果 .Net 收到状态为 4xx 或 5xx 的响应(感谢您的反馈),它将给您一个异常(exception)。有一个小的解决方法,检查一下:

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

希望这对您有所帮助。

问候

关于C# WebRequest 检查页面是否需要 HTTP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com