2015-03-13 59 views
0

我試圖編寫一個應用程序連接到一個網站,而不是垃圾郵件發送者,但有些事情是這樣的。使用webclient保持會話活着

但有一個問題:

在該網站,您將通過HTML表單登錄,我知道自己的目標PHP頁面和參數,以便使用C#我登錄這樣的:

using (WebClient wc = new WebClient()) 
{ 
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-urlencoded"; 
    wc.UploadString("http://example.com/login/check.php", "username=US&password=PW"); 
    MessageBox.Show(result); 
} 

logining後在我想要(例如)發送帖子時(如下面的代碼),答案是您沒有被吸引!

using (WebClient wc = new WebClient()) 
{ 
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-urlencoded"; 
    wc.UploadString("http://example.com/post/send.php", "title=T&body=B"); 
    MessageBox.Show(result); 
} 

我認爲問題在於會話已關閉。 我該怎麼辦?

+0

服務器如何跟蹤認證用戶?如果對原始登錄的響應包含一個cookie,那麼您需要將該cookie保存在您的代碼中,並在以後的請求中使用它。 – David 2015-03-13 14:43:02

+0

它使用會話(通常使用cookie)。我如何在我的代碼中使用cookie? – 2015-03-13 14:49:52

+0

我不確定WebClient對象是否具有您需要的操作,您可能需要在文檔中查找。從本質上講,您需要能夠創建一個HTTP請求,該請求具有更豐富的響應,而不僅僅是一個字符串。該響應將包含cookie,頭文件等。然後,您需要在之後創建更豐富的HTTP請求(再次,不僅僅是上傳字符串),因爲您需要在這些請求中包含cookie和頭文件。也許'HttpClient'?也許'WebRequest'? – David 2015-03-13 14:55:18

回答

1

我不知道你是否找到了答案,但嘗試這個

WebClient webClient = new WebClient(); 
    string url = @"http://example.com/login/check.php"; 
    var postData = new System.Collections.Specialized.NameValueCollection(); 
byte[] bytes = webClient.UploadValues(url,"POST",postData); 

string text = System.Text.Encoding.ASCII.GetString(bytes); 

使用Fiddler查找參數。