如何把浏览器里的cookies加到HttpWebRequest里? 在做一个工厂自动登陆的软件,用C#开发, 我想法是用C#内嵌的webBrowser登陆,取出所有的cookie(系统没有httponly的cookie)。然后,把cookie写到HttpWebRequest的CookieContainer里。再打开登陆后的页面URL.但是不成功,请各位大师指点,或者给点思路,多谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 采集COOKIE string cookieStr = wb1.Document.Cookie; //取webrowser的cookie string[] cookstr = cookieStr.Split(';'); foreach (string str in cookstr) { System.Net.CookieCollection ccl = new System.Net.CookieCollection(); string[] cookieNameValue = str.Split('='); cookieName = cookieNameValue[0].Trim().ToString(); cookieValue = cookieNameValue[1].Trim().ToString(); string[] cookstrValue = cookieValue.Split(','); cookieValue = cookstrValue[0].Trim().ToString(); Cookie ck = new Cookie(cookieName, cookieValue); myCookieContainer.Add(ck); //这是一个全局对象 }用webrowser的cookie放到HttpWebRequest里 HttpWebRequest request; HttpWebResponse response; request = WebRequest.Create(urlStr) as HttpWebRequest; request.Method = "GET"; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; request.Headers["Accept-Language"] = "zh-cn"; request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"; request.CookieContainer = myCookieContainer; request.KeepAlive = true; request.AllowAutoRedirect = true; //获取服务器返回的资源 using (response = (HttpWebResponse)request.GetResponse()) http://bbs.csdn.net/topics/390474102你的情况是否跟他类似,把你的要取的url地址也贴出来吧 CookieContainer dd = new CookieContainer(); string str = PostStr; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(PostDiZhi); request.Accept = "application/json,text/javascript,*/*;q=0.01"; request.Headers["Accept-Language"] = "zh-cn"; request.UserAgent = "Mozilla/5.0 "; request.KeepAlive = true; request.Referer = Referer; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.Headers.Add("x-requested-with", "XMLHttpRequest"); dd.Add(new Uri(PostDiZhi), new Cookie("uuid", cookie1)); request.CookieContainer = dd; Encoding encoding = Encoding.UTF8;//根据网站的编码自定义 byte[] postData = encoding.GetBytes(str);//Str即为发送的数据 request.ContentLength = postData.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postData, 0, postData.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Cookies = dd.GetCookies(request.RequestUri); Stream responseStream = response.GetResponseStream(); //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可 if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip")) { responseStream = new GZipStream(responseStream, CompressionMode.Decompress); } StreamReader streamReader = new StreamReader(responseStream); streamReader.Close(); responseStream.Close();这是一个以前用过的post方法贴给你具体内容可以自行修改,希望能帮到你 关于跨线程调用问题。 WinForm打包 帮下我啊1111 C# 动态添加label的问题? 脱离IDE后控件的定位问题 如何判断一个数组中的不为null的对象总数是否为0 请教: 怎样在在Button上分行显示? 委托和事件的区别? 求DataGride中动态显示复选款的代码!!! 水晶报表的打印问题? 关于gridview 多选问题 动态链接库
string cookieStr = wb1.Document.Cookie; //取webrowser的cookie
string[] cookstr = cookieStr.Split(';');
foreach (string str in cookstr)
{
System.Net.CookieCollection ccl = new System.Net.CookieCollection();
string[] cookieNameValue = str.Split('=');
cookieName = cookieNameValue[0].Trim().ToString();
cookieValue = cookieNameValue[1].Trim().ToString(); string[] cookstrValue = cookieValue.Split(',');
cookieValue = cookstrValue[0].Trim().ToString();
Cookie ck = new Cookie(cookieName, cookieValue);
myCookieContainer.Add(ck); //这是一个全局对象
}
用webrowser的cookie放到HttpWebRequest里
HttpWebRequest request;
HttpWebResponse response; request = WebRequest.Create(urlStr) as HttpWebRequest;
request.Method = "GET";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers["Accept-Language"] = "zh-cn";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
request.CookieContainer = myCookieContainer;
request.KeepAlive = true;
request.AllowAutoRedirect = true; //获取服务器返回的资源
using (response = (HttpWebResponse)request.GetResponse())
你的情况是否跟他类似,把你的要取的url地址也贴出来吧
string str = PostStr;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(PostDiZhi);
request.Accept = "application/json,text/javascript,*/*;q=0.01";
request.Headers["Accept-Language"] = "zh-cn";
request.UserAgent = "Mozilla/5.0 ";
request.KeepAlive = true;
request.Referer = Referer;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.Headers.Add("x-requested-with", "XMLHttpRequest");
dd.Add(new Uri(PostDiZhi), new Cookie("uuid", cookie1));
request.CookieContainer = dd;
Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
byte[] postData = encoding.GetBytes(str);//Str即为发送的数据
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = dd.GetCookies(request.RequestUri);
Stream responseStream = response.GetResponseStream();
//如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可
if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
{
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
}
StreamReader streamReader = new StreamReader(responseStream);
streamReader.Close();
responseStream.Close();
这是一个以前用过的post方法贴给你具体内容可以自行修改,希望能帮到你