读书人

c#POST请求登录网页怎么保持登录状态

发布时间: 2013-03-21 10:08:17 作者: rapoo

c#POST请求登录网页,如何保持登录状态啊,代码如下
HttpHelper _http;
string _outCookie = string.Empty;
public Form1()
{
InitializeComponent();
_http = new HttpHelper(Encoding.UTF8);
}

private void button1_Click(object sender, EventArgs e)
{
string postdata = "username=zheng8895&password=123321&keep_login=on&forward=http%3A%2F%2Fs1.sg2.ledu.com";
string url = "http://pass.ledu.com/user/login";
string refurl = "http://pass.ledu.com/user/login?forward=http%3A%2F%2Fs1.sg2.ledu.com&";
string data = _http.PostData(url, refurl, postdata, ref _outCookie);
richTextBox1.AppendText(data);
}




还有一个POST的类没贴出来,太长 了











[解决办法]


Cookie[] cookies = null;
if (HttpContext.Current.Session["ResponseSessionID"] != null)
{
cookies = new Cookie[1];
cookies[0] = new Cookie("ASP.NET_SessionId", HttpContext.Current.Session["ResponseSessionID"].ToString());
}

[解决办法]
这个是我用的方法,传进去了一个CookieContainer ,默认可以null,你请求后,登录成功了,方法返回CookieContainer 这个你留着就可以了,下次 再用这个去,就是登录状态了,关于持久化,你看下序列化就知道了哦。


  /// <summary>
/// Get 方式 获取数据
/// </summary>
/// <param name="webUrl"></param>
/// <returns></returns>
public Model.WebRequestReturnModel WebRequestGetHtmlByGet(string webUrl, CookieContainer cookieContainer, Encoding encoding, string refer,Model.Proxy proxy)
{
Model.WebRequestReturnModel model = new Model.WebRequestReturnModel();
HttpWebRequest webrequest = null;
try


{
webrequest = WebRequest.Create(webUrl) as HttpWebRequest;

webrequest.ServicePoint.Expect100Continue = false;
//是否使用 Nagle 不使用 提高效率
webrequest.ServicePoint.UseNagleAlgorithm = false;
//最大连接数
webrequest.ServicePoint.ConnectionLimit = 65500;
//数据是否缓冲 false 提高效率
webrequest.AllowWriteStreamBuffering = false;
if (proxy!=null)
{
model.proxy = proxy;
WebProxy myProxy = new WebProxy(proxy.ProxyInfo, false);
myProxy.Credentials = new NetworkCredential("", "");
webrequest.Proxy = myProxy;
}
else
{
webrequest.Proxy = GlobalProxySelection.GetEmptyWebProxy();
}
//设置其他的herader
webrequest =WebRequestSetHeaders(webrequest);
if (!String.IsNullOrEmpty(refer))
{
webrequest.Referer = refer;
}
else
{
webrequest.Referer = webUrl;


}
webrequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
webrequest.CookieContainer = cookieContainer;
webrequest.Timeout = 5000;
webrequest.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
webrequest.Accept = "*/*";
webrequest.KeepAlive = true;
webrequest.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");

using (HttpWebResponse response = (HttpWebResponse)webrequest.GetResponse())
{

if (response.ContentEncoding.ToLower().Contains("gzip"))
{
using (GZipStream stream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{

model.html = reader.ReadToEnd();
}
}
}
else if (response.ContentEncoding.ToLower().Contains("deflate"))
{
using (DeflateStream stream = new DeflateStream(response.GetResponseStream(), CompressionMode.Decompress))


{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{

model.html = reader.ReadToEnd();
}

}
}
else
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{

model.html = reader.ReadToEnd();
}
}
}
}
}
catch (Exception ex)
{
model.exception = ex;
model.html = string.Empty;

}
model.cookieContainer = cookieContainer;
return model;
}

引用:
引用:
为什么都要用cookie呢,CookieContainer 多好啊,你只要每次请求的是同一个CookieContainer多久可以保持登录了,并且支持序列化,持久化哦。~

求高手指教下具体要如何去实现这功能啊

读书人网 >C#

热点推荐