2012-04-04 71 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來檢索頁面的內容。