我想使用C#登录此网站:这是我的尝试,但它使我进入首页。下一页不返回我,下一页应该在登录后可见,请帮助我解决此问题:
string formParams =
string.Format("mail={0}&password={1}", [email protected]", "admin");
string cookieHeader;
WebRequest req = WebRequest.Create("http://muslimgowns.com/dashboard/login/public_login");
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"];
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string pageSource = sr.ReadToEnd();
File.AppendAllText("first.txt", pageSource);
}
string pageSource1;
string getUrl = "http://muslimgowns.com/dashboard/home";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource1 = sr.ReadToEnd();
File.AppendAllText("second.txt", pageSource1);
}
}
这似乎是第一个GET
请求public_login
返回的cookie的数量,以及POST
与事后凭证要求必须送到login_access
,而不是public_login
使用aHttpWebRequest
代替WebRequest
并通过设置cookie的cookie容器会有所帮助,实际上服务器会响应HTTP 302 Redirect
该POST
请求,并HttpWebRequest
自动遵循此重定向并下载仪表板。
始终使用http跟踪工具(例如Fiddler或Wireshark或Network Monitor)或浏览器的开发人员工具来查看接收到的内容(cookie,标头等)以及发送回的内容。这就是我得到所有这些的方式。
解决方法是:
string formParams = string.Format("mail={0}&password={1}", "[email protected]", "admin");
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest req = WebRequest.CreateHttp("http://muslimgowns.com/dashboard/login/public_login");
req.CookieContainer = cookieContainer;
req.GetResponse(); // This is just to get the initial cookies returned by the public_login
req = WebRequest.CreateHttp("http://muslimgowns.com/dashboard/login/login_access");
req.CookieContainer = cookieContainer; // Set the cookie container which contains the cookies returned by the public_login
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();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string pageSource = sr.ReadToEnd();
File.AppendAllText("first.txt", pageSource); // Dashboard is returned.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句