使用C#登录网站

时间:2013-02-25 04:19:20

标签: c# asp.net html login web-scraping

在每个人都感到不安之前,已经回答了这个问题。我已经在网上搜索如何做到这一点,并尝试了许多方法。 Login to website, via C#How to programmatically log in to a website to screenscape?这两个都很有帮助,但我无法弄清楚为什么我无法通过登录页面。这是我的代码:

string url = "https://www.advocare.com/login.aspx";
string url2 = "https://url.after.login";
HttpWebRequest wReq = WebRequest.Create(url) as HttpWebRequest;
wReq.KeepAlive = true;
wReq.Method = "POST";
wReq.AllowAutoRedirect = false;
wReq.ContentType = "application/x-www-form-urlencoded";
string postData = "ctl00$cphContent$txtUserName=Username&ctl00$cphContent$txtPassword=Password";
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
wReq.ContentLength = dataBytes.Length;
using (Stream postStream = wReq.GetRequestStream())
{
   postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse wResp = wReq.GetResponse() as HttpWebResponse;
string pageSource;
wReq = WebRequest.Create(url2) as HttpWebRequest;
wReq.CookieContainer = new CookieContainer();
wReq.CookieContainer.Add(wResp.Cookies);
HttpWebResponse wResp2 = wReq.GetResponse() as HttpWebResponse;
using (StreamReader sr = new StreamReader(wResp2.GetResponseStream()))
{
    pageSource = sr.ReadToEnd();
}

每次我查看pageSource时,它都是login.aspx页面的HTML。我必须在这里遗漏一些东西。也许它不是拿饼干,我不知道。我除了一个问题,为什么这不起作用,在字符串postData =“”中。那些假设是html标签的名称或id部分吗?非常感谢任何帮助,因为我很难过,必须找到一个不同的方式。我想继续使用WebRequestWebResponse,而不是使用WebBrowser。如果我不能,哦,好吧。再次感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

除了登录,你还想做什么?如果它像程序化地搜索一个网站,我会建议使用selenium并根据它创建一个c#app。如果你想我可以发布基于selenium项目的基础项目的链接。

答案 1 :(得分:0)

不一定要查看页面源,而是查看实际的HTTP POST。安装HTTP代理,例如Fiddler,然后重新访问您要模拟的页面。完成HTTP POST请求,并检查代理中生成的结果。从那里,您将能够看到正在传递的实际参数,cookie,标题等,然后您可以尝试在代码中复制它。简单地查看HTML源代码时通常很容易错过,但监控网络流量非常简单。

相关问题