2012-04-04 69 views
3

我刚刚开始在几周前与C#玩耍。我得到了一个我正在尝试执行的任务,并不确定现在的方式是否正确。试图登录到一个网站点击一个按钮

我试图登录到网站(在我的案件的WordPress网站 - 为更好的选择湖),并使用C#在管理面板导航

到目前为止,我已经做什么创建一个新项目 - 视窗表格申请。

下面的代码 - 发送到与密码/用户名等参数的网站的请求为POST

private void button2_Click(object sender, EventArgs e) 
{ 
    CookieContainer cookieJar = new CookieContainer(); 
    CookieContainer cookieJar2 = new CookieContainer(); // will use this later 
    string testaa = ""; // will use this later 
    string paramaters = "log=xxxx&pwd=xxxx&testcookie=1&redirect_to=http://www.example.com/wp-admin/&wp-submit=Log In"; 
    string strResponse; 
    HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("http://www.lyndatobin-howes.com/wp-login.php"); 
    requestLogin.Method = "POST"; 
    requestLogin.AllowAutoRedirect = false; 
    requestLogin.ContentType = "application/x-www-form-urlencoded"; 
    requestLogin.CookieContainer = cookieJar; 
    requestLogin.ContentLength = paramaters.Length; 
    StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), Encoding.ASCII); 
    stOut.Write(paramaters); 
    stOut.Close(); 
} 

然后我有这样的代码,以采取响应的饼干。

HttpWebResponse response = (HttpWebResponse)requestLogin.GetResponse(); 
foreach (Cookie c in response.Cookies) 
{ 
    cookieJar2.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain)); 
} 

然后我有这个读取响应+关闭一些流。

StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream()); 
strResponse = stIn.ReadToEnd(); 
string responseFromServer = stIn.ReadToEnd(); 
webBrowser1.DocumentText = responseFromServer; 
stIn.Close(); 
response.Close(); 

然后,我尝试使用的页面我试图访问如下上述的cookie:

HttpWebRequest requestLogin2 = (HttpWebRequest)WebRequest.Create("http://www.example.com/wp-admin/"); 
requestLogin2.Method = "POST"; 
requestLogin2.AllowAutoRedirect = false; 
requestLogin2.ContentType = "application/x-www-form-urlencoded"; 
requestLogin2.CookieContainer = cookieJar2; 
requestLogin2.ContentLength = paramaters.Length; 
StreamWriter stOut2 = new StreamWriter(requestLogin2.GetRequestStream(), System.Text.Encoding.ASCII); 
stOut2.Write(paramaters); 
stOut2.Close(); 

StreamReader stIn2 = new StreamReader(requestLogin2.GetResponse().GetResponseStream()); 
strResponse = stIn2.ReadToEnd(); 
string responseFromServer2 = stIn2.ReadToEnd(); 
webBrowser1.DocumentText = responseFromServer2; 
richTextBox2.Text += "\n\n\n" + responseFromServer2; 
stIn.Close(); 

那么它不为某种原因,我一直想这样的工作现在一周。

我试图显示标题 - 第一个请求后,看看我回来什么标题。然后看着我建立的cookie(cookieJar2),看起来它们是不一样的。

无论如何,任何关于此事的帮助将是真棒和高度赞赏。我尽可能提供尽可能多的细节。

+0

无论我做什么,我只保留响应cookie,我想因为我错过了其他4个饼干..不知道该怎么做。 – 2012-04-04 10:46:19

+0

任何人有任何想法? – 2012-04-04 22:18:03

+0

还在找什么关于此事 – 2012-04-05 12:14:12

回答

0

我注意到你的代码的第一件事是您在初始登录致电GetResponse()两次:

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

StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream()); 

其结果是,你正在做的登录请求两次,并将收回两个不同的cookie。这就是为什么cookieJar2中的Cookie与以后输出的内容不匹配的原因。重用你response对象:

StreamReader stIn = new StreamReader(response.GetResponseStream()); 

接下来,当您尝试加载管理页面,不要POST它。你的第二个请求应该是GET来检索页面的内容。