【问题标题】:How to handle popup authentication?如何处理弹出式身份验证?
【发布时间】:2010-12-02 22:54:44
【问题描述】:

我对此很陌生,没有其他人可以问。我正在尝试以编程方式 (C#) 访问某些网页抓取软件的网页。我已经弄清楚了使用 HttpWebResponse 和 HttpWebRequest 类通过网页表单执行登录的过程,但是我有一个具有两阶段登录过程的网站。

第一次登录是通过弹出窗口进行的。后台没有加载网页,只是弹出一个对话框说需要验证并提示输入用户名和密码。

通过第一次登录后,第二次登录只是一个网络表单,我应该能够根据我已经学到的知识来处理自己。

我的问题:如何以编程方式为弹出式身份验证请求提供登录信息?

编辑

只是为了提供更多信息。 Fiddler 在尝试访问网站时将 Host 设为 CONNECT。

编辑

我尝试在下面使用 MrEye 的答案,虽然它似乎让我更进一步,但仍然有挂断。我遇到了证书问题,所以经过一些 Google 工作后,我通过添加以下代码找到了解决方法:

ServicePointManager.ServerCertificateValidationCallback +=
            delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;
        };

现在我得到一个System.Net.WebException,其值为“删除服务器返回错误:(401) 未经授权。”异常的Status 是ProtocolError,尽管我无法进一步了解。我确定提供的用户名/密码是有效的。

【问题讨论】:

  • 401 HTTP 响应表明远程服务器拒绝了您提交给它的凭据我知道您说您确定它们是正确的,确定有多确定 ;)。你能发布 HttpWebRequest 的代码吗?

标签: c# authentication web-scraping http-authentication


【解决方案1】:

您需要做的就是将一个 NetworkCredential 对象分配给您创建的 HttpWebRequest 对象的 Credentials 属性。例如:

myWebRequest.Credentials = new NetworkCredential("username","password");

根据您连接的服务器,您可能还需要:

myWebRequest.PreAuthenticate = true; 

【讨论】:

  • 终于让它工作了,它与我提供的凭据没有任何关系,它们是正确的,但我需要允许重定向并且 URL 有点不正确。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2013-10-21
  • 2016-05-11
  • 2012-12-17
  • 1970-01-01
  • 2014-08-09
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多