C# 使用C编程登录网站#

C# 使用C编程登录网站#,c#,web-scraping,C#,Web Scraping,我想用C#登录这个网站:这是我的尝试,但它将我发送到第一页。不返回下一页,登录后应可见,请帮助我解决此问题: string formParams = string.Format("mail={0}&password={1}", store@admin.com", "admin"); string cookieHeader; WebRequest req = WebRequest.Create("http://muslimgowns.com/dashboard/l

我想用C#登录这个网站:这是我的尝试,但它将我发送到第一页。不返回下一页,登录后应可见,请帮助我解决此问题:

string formParams = 
string.Format("mail={0}&password={1}", store@admin.com", "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);
            }
        }

似乎第一个对
public\u login
GET
请求返回了大量cookie,之后带有凭据的
POST
请求必须发送到
login\u access
而不是
public\u login

使用
HttpWebRequest
而不是
WebRequest
,并通过设置它的cookie容器来帮助,实际上服务器通过
http302重定向
响应
POST
请求,
HttpWebRequest
自动遵循此重定向并下载仪表板

始终使用http跟踪工具(如Fiddler或Wireshark)、网络监视器或浏览器的开发人员工具来查看接收到的内容(cookie、标头等)和发送回的内容。我就是这样得到这一切的

以下是修复方法:

string formParams = string.Format("mail={0}&password={1}", "store@admin.com", "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.
} 

在显示主页之前,您是否使用Fiddler或TamperData(Firefox)查看实际发送到服务器的请求?你可能还想看看答案。这是Oguz Ozgul的完美答案谢谢:)这个答案的重要部分不是针对这个特定案例的修复。我认为最重要的部分是建议使用Http Analyzer查看请求的资源和请求/响应详细信息,这将帮助您进一步开发是的,我正在尝试Http Analyzer。我是新手,也面临一些问题。你能告诉我如何登录fastundercar.com吗。我正在努力。登录:和登录后:也有任何方法传递隐藏字段以及用户和密码信息。如果是,那么语法是什么。提前感谢您访问隐藏字段与传递凭据没有什么不同。查询字符串格式(key1=value1&key2=value2&hidden1=hiddenvalue1)是所有表单元素的格式。我无法再为您提供更多的站点,但您可以使用您的分析器分析http请求和响应的请求头和主体,并尝试用C#Hello I’m Get http/1.1 302 Moved Temporary response模拟相同的情况,当我尝试登录站点时。Http Analyzer显示,请求在登录后被发送到内部页面,但在再次重定向到登录页面之后。有什么想法吗?