C#保存网页cookie的问题

sjjwind 2013-05-29 10:46:09
在做一个东西,从一个页面获取信息,但是要两次访问,第一个访问保存cookie,第二次访问才能获取正确的信息。我按照网上的代码,自己也改了挺长时间,但是都没有获取正确的信息。
代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strLoginURL);
CookieContainer objcok = new CookieContainer();
request.CookieContainer = objcok;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
objcok.Add(response.Cookies);
//request = (HttpWebRequest)WebRequest.Create(strLoginURL);
response = (HttpWebResponse)request.GetResponse();
// 获取响应流
Stream responseStream = response.GetResponseStream();
// 对接响应流(以"GBK"字符集)
StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
// 开始读取数据
Char[] sReaderBuffer = new Char[256];
int count = sReader.Read(sReaderBuffer, 0, 256);
while (count > 0)
{
String tempStr = new String(sReaderBuffer, 0, count);
content.Append(tempStr);
count = sReader.Read(sReaderBuffer, 0, 256);
}
// 读取结束
sReader.Close();

能获取到token字段即可,请各位不吝赐教。
返回的token字段一直是什么第一和第二个参数要是string,反正是不正确的字段。

URL为https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=false
...全文
232 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-05-29
  • 打赏
  • 举报
回复
可以通过Request对象的 Cookie 集合来获取了,如:
Request.Cookies[varName].Value
你的代码中都没有获取cookie的代码的,详细内容参考下面两篇博文: http://www.cnblogs.com/shengchanlix/archive/2011/08/29/2158987.html http://www.cnblogs.com/freeliver54/archive/2013/04/09/3011059.html
sjjwind 2013-05-29
  • 打赏
  • 举报
回复
自己顶一次吧。。。
sjjwind 2013-05-29
  • 打赏
  • 举报
回复
是cookie没有附加到第二次的request中,后来自己出来了,已经OK了,谢谢各位。
我要坚强 2013-05-29
  • 打赏
  • 举报
回复
 string strLoginURL = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=false";
            string cookiesStr;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strLoginURL);
            request.CookieContainer = new CookieContainer();
            //取cookies
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                var cookies = response.Cookies;
                //关键是这条,至于cookiesStr为什么要这样你可以通过ie(开发人员工具分析)
                cookiesStr = string.Format("{0}={1};{2}={3}", cookies[1].Name, cookies[1].Value, cookies[0].Name, cookies[0].Value);
            }
            request = (HttpWebRequest)WebRequest.Create(strLoginURL);
            //关键是这条,至于cookiesStr为什么要这样你可以通过ie(开发人员工具分析)
            request.Headers.Add("Cookie", cookiesStr);
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                // 获取响应流
                using (Stream responseStream = response.GetResponseStream())
                {
                    StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                    //带你要求的bdPass.api.params.login_token
                    richTextBox1.AppendText(sReader.ReadToEnd());
                    // 读取结束
                    sReader.Close();
                }
            }
你的cookie CookieContainer 的形式发 过去不成功(估计cookie索引颠倒引起的)你可以用字符串发过去呀,像这样的例子最好用IE 的开发人员工具(F12)分析分析,或者用别的封包分析软件分析一下再提交
sjjwind 2013-05-29
  • 打赏
  • 举报
回复
引用 5 楼 lizhi3186575 的回复:
WebClient.DownloadString——http://msdn.microsoft.com/zh-cn/library/fhd1f0sw.aspx
是取token没错,如果用浏览器,删掉该网页的cookie后,刷新,第一次返回的是有问题的数据,然后再刷新一次就会返回正确的数据,我现在就是要模拟这个过程,没有cookie他会首先保存cookie,保存完之后再发送一个get,才会得到正确的数据。
人生导师 2013-05-29
  • 打赏
  • 举报
回复
人生导师 2013-05-29
  • 打赏
  • 举报
回复
你要取到token就可以了吗?如果是那样的话,我从浏览器直接就可以看到这个发出请求之后返回的是一个字符串,你可以使用WebClient.DownloadString(url)方法来获得回复的字符串,然后再对返回的字符串进行操作就可以了,直接找到token的字符位置,然后在从后面读取指定位数就可以获取token的值了,感觉根本不是操作cookies的来实现的,感觉思路就错了,我感觉cookies这个集合中应该不会有你想要的token这个值的,你可以单步调试看看Request.Cookies这个集合是否有你所要数据,如果没有的话,思路就错了,应该按照我说的思路来实现,即对返回数据进行操作,这时候就转变为简单的字符串操作了。
sjjwind 2013-05-29
  • 打赏
  • 举报
回复
引用 2 楼 lizhi3186575 的回复:
可以通过Request对象的 Cookie 集合来获取了,如:
Request.Cookies[varName].Value
你的代码中都没有获取cookie的代码的,详细内容参考下面两篇博文: http://www.cnblogs.com/shengchanlix/archive/2011/08/29/2158987.html http://www.cnblogs.com/freeliver54/archive/2013/04/09/3011059.html
上面的例子我参考了,按照里面的思想改了下代码,还是不行。
C#基础类库 1.Chart图形 Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#关于Session的操作,获取Session,设置Session,删除Session使用方便,只需要调用方法就可以了 SessionHelper2 C#关于Session的一些高级操作,比如取Session对象,取Session数据等等 3.CSV文件转换 CsvHelper CSV文件导入DataTable和DataTable导出到Csv文件等操作 4.DEncrypt 加密/解密帮助类 DEncrypt C#DEncrypt加密/DEncrypt解密帮助类 ,多种方式,可以设置Key DESEncrypt C#DESEncrypt加密/DESEncrypt解密帮助类 ,多种方式,可以设置Key Encrypt C#Encrypt--Encrypt加密/Encrypt解密/附加有MD5加密,个人感觉很不错的一个加密类 HashEncode 哈希加密帮助类,得到随机哈希加密字符串,随机哈希数字加密等 MySecurity MySecurity--Security安全加密/Security Base64/Security文件加密,以及一些常用的操作方法 RSACryption RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient   FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper FTPHelper-FTP帮助类,FTP常用操作方法,添加文件,删除文件等 FTPOperater FTP操作帮助类,方法比较多,比较实用 6.JS操作类 JsHelper JsHelper--Javascript操作帮助类,输出各种JS方法,方便不懂JS的人使用,减少代码量 7.JSON 转化类 ConvertJson List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 8.Mime MediaTypes 电子邮件类型帮助类,规定是以Xml,HTML还是文本方式发送邮件 MimeEntity Mime实体帮助类 MimeHeaders mime的Header帮助类 MimeReader mime读取帮助类 QuotedPrintableEncoding mimeEncoding帮助类 9.PDF 转化类 PDFOperation PDFOperation--C#PDF文件操作帮助类 类主要功能有1.构造函数2.私有字段3.设置字体4.设置页面大小 5.实例化文档6.打开文档对象7.关闭打开的文档8.添加段落9.添加图片10.添加链接、点 等功能 10.ResourceManager 操作类 AppMessage app消息格式化类,返加字符串帮助类 ResourceManager C#一个操作Resource的帮助类 ResourceManagerWrapper Resources 操作Resources的帮助类,使用Api的方式 Sample.xml 11.XML操作类 XmlHelper 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作和操作后进行保存的功能。 XMLProcess 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作的功能。 12.弹出消息类 MessageBox JS弹出信息帮助类 ShowMessageBox 相对于MessageBox更丰富的提示类 13.导出Excel 操作类 DataToExcel

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧