【问题标题】:Connecting to a password protected web directory连接到受密码保护的 Web 目录
【发布时间】:2014-03-17 11:49:22
【问题描述】:

在我的程序中,我试图访问一个受密码保护的网站(在浏览器中打开时,会出现一个像图片上这样的弹出窗口,要求用户登录(注意:这只是一张找到的图片在谷歌上,而不是我使用的实际网站))。

现在,我不需要完全打开这个站点(实际上它是子目录)或下载它或任何东西,我只是想验证登录信息。假设应用程序中有两个文本框,类似于浏览器中弹出的文本框,我想验证输入的用户名和密码是否正确。知道怎么做吗? 我的想法是试图让它成为一个 FTP 文件,因为这是我可以弄清楚如何在代码中设置登录名和密码的唯一方法,我希望如果凭据不正确,程序会丢弃异常或其他东西,但它只是通过这段代码没有结果。

感谢您的帮助

【问题讨论】:

    标签: c# web


    【解决方案1】:

    您可以尝试对 url 发出 http 请求,并在请求中提供凭据。如果响应是状态码200 (OK) 一切正常。如果响应的状态码为401 (Unauthorized),则凭据不正确:

    // create request
    var request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
    request.Credentials = new NetworkCredential("Username", "Password");
    
    try
    {
        // get response
        var response = (HttpWebResponse)request.GetResponse();
        var statusCode = response.StatusCode;
    
        // verify response
        if (statusCode == HttpStatusCode.OK)
        {
            // login was ok
        }
    }
    catch (WebException ex)
    {
        if (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.Unauthorized)
        {
            // unauthorized
        }
    }
    

    【讨论】:

    • 试过这个,符合request.GetResponse();抛出异常 - WebException 未处理,远程服务器返回错误:(401) Unauthorized.
    • @MarekBuchtela 这意味着您的登录失败。我稍微更改了代码,因为它引发了异常。请查看我的更新答案。
    • 不,我的意思是,即使我输入正确的密码也会抛出异常
    • @MarekBuchtela 我已经在上面测试过这段代码,对我来说效果很好。如果您使用浏览器浏览网站并输入正确的凭据,您会收到哪个状态码?
    猜你喜欢
    • 2011-07-01
    • 2013-06-09
    • 2015-09-30
    • 2012-10-03
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多