C# 处理302后获取COOKIE
2013-03-17 23:43
369 查看
C# 处理302后获取COOKIE
分类:2011-01-0118:21 1007人阅读 评论(0) 收藏 举报
c#string.netexceptioncookiesstream
public static string Login(String url, String paramList, string MyEncode, ref string myCookieContainer,string refer)
{
HttpWebResponse res = null;
string strResult = string.Empty; ;
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
if (!string.IsNullOrEmpty(refer))
{
req.Referer = refer;
}
req.AllowAutoRedirect = false;
CookieContainer cookieCon = new CookieContainer();
req.CookieContainer = cookieCon;
StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved = { '?', '=', '&' };
byte[] SomeBytes = null;
if (paramList != null)
{
int i = 0, j;
while (i < paramList.Length)
{
j = paramList.IndexOfAny(reserved, i);
if (j == -1)
{
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length - i)));
break;
}
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j - i)));
UrlEncoded.Append(paramList.Substring(j, 1));
i = j + 1;
}
SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
}
else
{
req.ContentLength = 0;
}
res = (HttpWebResponse)req.GetResponse();
//MessageBox.Show(((int)res.StatusCode)+"");
myCookieContainer = req.CookieContainer.GetCookieHeader(new Uri(url));
if (res.StatusCode == HttpStatusCode.Redirect)
{
//MessageBox.Show(res.Headers["Location"]);
string cookies = res.Headers["Set-Cookie"].Replace(",", "%2c");
cookies = cookies.Replace("httponly%2c", "");
//MessageBox.Show(cookies);
return SendDataByGet(res.Headers["Location"], "", "utf-8", cookies, refer);
}
Stream ReceiveStream = res.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding(MyEncode);
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);
strResult += str;
count = sr.Read(read, 0, 256);
}
}
catch (Exception e)
{
//MessageBox.Show(e.ToString());
throw new Exception("Web.Login:/r/n" + e.ToString());
}
finally
{
if (res != null)
{
res.Close();
}
}
return strResult;
}
public static string SendDataByGet(string url, string data, string encode, string cookies, string refer)
{
string retString = string.Empty;
HttpWebResponse response = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + (data == "" ? "" : "?") + data);
string host = string.Empty;
Uri uri = new Uri(url);
host = uri.Scheme + "://" + uri.Authority + "/";
CookieContainer cc = new CookieContainer();
string[] SegCookie = new string[] { };
SegCookie = cookies.Split(new string[] { ";" }, Strin
4000
gSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < SegCookie.Length; i++)
{
string[] tmp = new string[] { };
tmp = SegCookie[i].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
if (tmp.Length == 2)
{
Cookie c = new Cookie();
c.Name = tmp[0].Trim();
c.Value = tmp[1];
cc.Add(new Uri(host), c);
}
}
request.CookieContainer = cc;
request.Method = "GET";
request.ContentType = "text/html;charset=" + encode;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
if (!string.IsNullOrEmpty(refer))
{
request.Referer = refer;
}
else
{
request.Referer = url;
}
response = (HttpWebResponse)request.GetResponse();
string abc = string.Empty;
for (int i = 0; i < response.Headers.Count; i++)
{
abc += response.Headers.Keys[i].ToString() + "=====>" + response.Headers[response.Headers.Keys[i].ToString()]+"/r/n";
}
//MessageBox.Show(abc);
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encode));
retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
request.Abort();
response.Close();
return retString;
}
catch (Exception ex) { throw new Exception("Web.SendDataByGet:/r/n" + ex.ToString()); }
finally
{
if (response != null)
response.Close();
}
}
相关文章推荐
- C# 处理302后获取COOKIE
- 爬虫程序获取登录Cookie信息时遇到302,怎么处理
- c#学习(2):大图片的特效处理与获取屏幕上任一点的rgb值
- C# web 获取服务端cookie
- js操作cookie;js的setInterval;C#获取指定页面的内容;Ajax.dll的使用
- 微信公众平台开发----自定义菜单、消息处理及获取OpenID(C#)
- C#使用SOCKET获取ASPSESSIONID、PHPSESSID等Cookie
- 获取请求URL、Cookie及文件上传处理
- C#控件怎样获取,和失去焦点的处理
- C# : WebRequest发起Http Post请求模拟登陆并cookie处理示例
- 【转】C# WebRequest发起Http Post请求模拟登陆并cookie处理示例
- C#获取网页内容,并且处理正确编码
- c#学习(2):大图片的特效处理与获取屏幕任一点RGB值
- c#图像处理入门(-bitmap类和图像像素值获取方法)
- Cookie的处理和获取
- C#获取CSV文件内容对逗号和引号分隔的处理
- c#中获取cookie
- C# mvc js cookie 接收手机验证码并防止页面刷新后重复获取验证码
- C#基于WebBrowser获取cookie的实现方法
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂