使用HttpWebRequest获取和发布以登录到C#.Net网站

时间:2018-09-28 20:48:17

标签: c# .net httpwebrequest httpwebresponse

我创建了一个c#控制台应用程序来使用Selenium登录网站,并且效果很好。现在,我想将此功能添加到现有的.Net Core应用程序中。

到目前为止,我有以下内容:

string formUrl = "https://cap.mcmaster.ca/mcauth/login.jsp?app_id=1505&app_name=Avenue";
string formParams = string.Format("user_id={0}&pin={1}", "user", "pass"); //In my program I have the correct credentials
string cookieHeader;
var cookies = new CookieContainer();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(formUrl);
req.CookieContainer = cookies;
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];


string pageSource;
string getUrl = "https://avenue.cllmcmaster.ca/d2l/home";
HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
getRequest.CookieContainer = new CookieContainer();
getRequest.CookieContainer.Add(resp.cookies);
getRequest.Headers.Add("Cookie", cookieHeader);

getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
    pageSource = sr.ReadToEnd();
}

由于某种原因,在上面的代码中,Cookies在“ resp.Cookies”中带有下划线作为错误。 (CS1061'WebResponse'不包含'Cookies'的定义,并且无法找到接受类型为'WebResponse'的第一个参数的可访问扩展方法'Cookies')

我试图在这里关注这些帖子:Login to website, via C#,但似乎无法正常工作。

1 个答案:

答案 0 :(得分:0)

出现编译时错误的原因是因为WebResponse类没有Cookies属性。

  

来自.NET文档

     

WebResponse类是抽象基类,   导出特定于协议的响应类。

相反,请看一下HttpWebResponse类。此类提供WebResponse的HTTP特定实现。

您可以将WebResponse投射到HttpWebResponse

HttpWebResponse response = (HttpWebResponse)request.GetResponse();


HttpWebResponse.Cookies属性

  

获取或设置与此响应关联的cookie。

文档

HttpWebResponse.Cookies