2010-12-02 87 views
1

我对此很新,也没有其他人要问。我试图以编程方式访问网页(C#)以获取一些网络报废软件。我已经想出了使用HttpWebResponse和HttpWebRequest类通过网页表单进行登录的过程,但是我有一个拥有两个阶段登录过程的网站。如何处理弹出式认证?

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

第一次登录后,第二次登录只是一个Web表单,我应该能够从我已经学到的东西中处理自己。

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

编辑

只是提供一些更多的信息。尝试访问网站时,Fiddler会将主机设为CONNECT。

编辑

我尝试使用以下MrEye的答案,但它似乎让我远一点,仍然有挂断。我刚开证书问题,所以经过一些谷歌的工作中,我发现了一个解决方法是通过添加以下代码:

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

现在我得到一个System.Net.WebException值为“删除服务器返回错误:(401 )未经授权。“例外的Status是ProtocolError,虽然我还没有得到任何进一步的。我确定所提供的用户名/密码是有效的。

+0

401 HTTP响应表示远程服务器拒绝您已经提交给它的凭据我知道你说你确定他们是正确的,有多确定;)。你可以发布HttpWebRequest的代码吗? – MrEyes 2010-12-03 00:06:36

回答

1

您需要做的就是将NetworkCredential对象与您创建的HttpWebRequest对象的Credentials属性对齐。例如:

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

根据您连接到你的服务器上可能还需要:

myWebRequest.PreAuthenticate = true; 
+0

终于让它起作用了,它与我提供的凭据没有任何关系,它们是正确的,但我需要允许重定向,并且URL稍微不正确。万分感谢! – Anthony 2010-12-03 12:40:05