2015-03-13 114 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查找参数。