我创建了一个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#,但似乎无法正常工作。
答案 0 :(得分:0)
出现编译时错误的原因是因为WebResponse
类没有Cookies
属性。
来自.NET文档
WebResponse类是抽象基类, 导出特定于协议的响应类。
相反,请看一下HttpWebResponse
类。此类提供WebResponse
的HTTP特定实现。
您可以将WebResponse
投射到HttpWebResponse
:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
获取或设置与此响应关联的cookie。