如何为WebRequest分配凭据然后导航到它?

时间:2019-03-28 07:40:48

标签: c# webrequest

我正在尝试使用其他人的证书查看报告。我对如何分配凭据然后导航到URL感到困惑。

问题: 是否可以将凭据分配给WebRequest然后导航到url?可能是这样的:

WebRequest request = WebRequest.Create(repUrl);
request.Credentials = new NetworkCredential("UserName", "Password");
webBrowser1.Navigate(request.RequestUri);

我知道当我使用这样的东西时我能够看到报告。但是我无法单击该报告:

WebRequest request = WebRequest.Create(repUrl);
request.Credentials = new NetworkCredential("Username", "Password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader receiveStream = new StreamReader(response.GetResponseStream());
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.DocumentStream = receiveStream.BaseStream;

请帮助我。我在这个问题上停留了太久了。谢谢。

1 个答案:

答案 0 :(得分:0)

设置凭据,如下所示

request.Credentials = new NetworkCredential("UserName", "Password");

如果页面接受凭据(基本身份验证)是可能的,根据我的经验,在大多数情况下并非如此。

如果要使用WebRequest,则需要提供标头,cookie,并且需要cookie容器,现在,如何获取cookie就是另一回事了。

使用WebBrowser控件时。我建议的最简单方法是,先导航到登录页面,填写凭据,然后单击提交按钮。然后导航到所需的页面页面:

private void webbrowser1_DocumentCompleted(object sender, DocumentCompletedEventArgs e)
{
     if(webbrowser1.Url.EndsWith("login.aspx")  //check if it is the login url
     {
          var doc = webbrowser1.Document;
          doc.GetElementById("email").SetAttribute("value", email);
          doc.GetElementById("password").SetAttribute("value", password);
          doc.GetElementsByTagName("input").OfType<HtmlElement>()
               .FirstOrDefault(x => x.GetAttribute("type") == "submit"))
               .InvokeMember("click");
     }
     else
     {
           webbrowser1.Navigate(repUrl);
     }


}

在上述答案中,我只是假设登录页面为login.aspx,并且电子邮件和密码字段的ID为emailpassword,当然您必须更改填写方式这些输入具有自己的id,或者如果它们的名称中没有ID,...