读书人

新手提问: WinForm HttpRequest Sessi

发布时间: 2011-12-15 23:41:24 作者: rapoo

新手提问: WinForm HttpRequest Session相关的问题
using System;
using System.Net;
using System.Text;
using System.IO;
using System.Threading;
using System.Web;
using System.Text.RegularExpressions;

namespace AutoPM
{
/// <summary>
/// Summary description for PostMessage.
/// </summary>
public class PostMessage
{
private string subject;
private string body;
private string userName;
private string password;
private string loginUrl;
private string semdMessageUrl;

private string cookieHeader;

public PostMessage() : this( " ", " ")
{
//
// TODO:
//
}


public PostMessage(string subject, string body)
{
this.subject = subject;
this.body = body;
}

/// <summary>
/// Message subject
/// </summary>
public string Subject
{
set
{
this.subject = value;
}
}

/// <summary>
/// Message body
/// </summary>
public string Body
{
set
{
this.body = value;
}
}

/// <summary>
/// Login user name
/// </summary>
public string UserName
{
set
{
this.userName = value;
}
}

/// <summary>
/// Login password
/// </summary>
public string Password
{
set
{
this.password = value;
}
}

/// <summary>
/// Login Url address
/// </summary>
public string LoginUrl
{
set
{
this.loginUrl = value;
}
}

/// <summary>
/// Semd private message Url address
/// </summary>
public string SemdMessageUrl
{

set
{
this.semdMessageUrl = value;
}
}

public void SendMessage( int userId )
{
HttpWebResponse response = null;
string result = " ";

try
{
Encoding encoding = System.Text.Encoding.Default;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create( semdMessageUrl );
request.Method = "POST ";
request.Referer = "http://xxxxxxx ";

// Post data
string postData = string.Format( "sTitle={0}&sContent={1} ",
subject,


body );
byte[] buffer = encoding.GetBytes( postData );
// System.Windows.Forms.MessageBox.Show( postData );

// Set the content type to a FORM
request.ContentType = "application/x-www-form-urlencoded ";

// Get length of content
request.ContentLength = buffer.Length;

// Session
CookieContainer cookieCon = new CookieContainer();
request.CookieContainer = cookieCon;
request.CookieContainer.SetCookies( new Uri(semdMessageUrl), cookieHeader );

//
request.AllowAutoRedirect = false;

// Get request stream
Stream newStream = request.GetRequestStream();

// Send the data.
newStream.Write( buffer, 0, buffer.Length );

// Close stream
newStream.Close();

response = (HttpWebResponse)request.GetResponse();

Stream ReceiveStream = response.GetResponseStream();
Encoding encode = System.Text.Encoding.Default;
StreamReader sr = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[1024];
int count = sr.Read( read, 0, 1024 );
while (count > 0)
{
String str = new String(read, 0, count);
result += str;
count = sr.Read(read, 0, 1024);
}
}
catch(Exception e)
{
result = e.ToString();
}
finally
{
if ( response != null )
{
response.Close();
}
}

System.Windows.Forms.MessageBox.Show(result);
}

public string Login()
{
HttpWebResponse response = null;
string result = " ";

try
{
Encoding encoding = System.Text.Encoding.Default;

Random rd = new Random((int)System.DateTime.Now.Ticks);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginUrl);
request.Method = "POST ";

// Post data
string postData = string.Format( "LoginName={0}&LoginPwd={1} ", userName, password);
byte[] buffer = encoding.GetBytes( postData );

// Set the content type to a FORM
request.ContentType = "application/x-www-form-urlencoded ";

// Get length of content
request.ContentLength = buffer.Length;

request.AllowAutoRedirect = false;
CookieContainer cookieCon = new CookieContainer();


request.CookieContainer = cookieCon;

// Get request stream
Stream newStream = request.GetRequestStream();

// Send the data.
newStream.Write(buffer,0,buffer.Length);

// Close stream
newStream.Close();

response = (HttpWebResponse)request.GetResponse();
cookieHeader = request.CookieContainer.GetCookieHeader(new Uri(loginUrl));

Stream ReceiveStream = response.GetResponseStream();
Encoding encode = System.Text.Encoding.Default;
StreamReader sr = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[256];
int count = sr.Read( read, 0, 256 );
while (count > 0)
{
String str = new String(read, 0, count);
result += str;
count = sr.Read(read, 0, 256);
}
}
catch(Exception e)
{
result = e.ToString();
}
finally
{
if ( response != null )
{
response.Close();
}
}

return result;
}
}
}


问题是:调用Login成功,看cookieHeader也没有问题,但接着调用SendMessage不成功,看Response的结果是需要登录,请帮忙分析原因,谢谢。

[解决办法]
// Session
CookieContainer cookieCon = new CookieContainer();
要用login那个,不能用new

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
[解决办法]
up

读书人网 >C#

热点推荐