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的结果是需要登录,请帮忙分析原因,谢谢。

解决方案 »

  1.   

    // Session
    CookieContainer cookieCon = new CookieContainer();
    要用login那个,不能用new
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    LZ不要用这个HTTPREQUEST,用SOCKET什么问题都好解决,咱们交流一下,我用SOCKET做了一个发贴机和验证码识别卖得很好 Q:631753663