当前位置: 首页 > news >正文

通过COM来获取CookieContainer,简单又好用

最近在做一个通过HttpWebRequest来实现登陆和自动发信息的小软件,虽然还没有实现,但是今天从一个老外的网站上看到了一个获取CookieContainer很好的方法,拿出来共享一下,这是我看到过代码最少而且很不错的了。
 1 None.gif using  System;
 2 None.gif using  System.Runtime.InteropServices;
 3 None.gif using  System.Text;
 4 None.gif using  System.Net;
 5 None.gif
 6 None.gif namespace  NExplus.NSiter
 7 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 8ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 9InBlock.gif    /// 获取Cookie的方法类。
10ExpandedSubBlockEnd.gif    /// </summary>

11InBlock.gif    public class CookieManger
12ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
13ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
14InBlock.gif        /// 通过COM来获取Cookie数据。
15InBlock.gif        /// </summary>
16InBlock.gif        /// <param name="url">当前网址。</param>
17InBlock.gif        /// <param name="cookieName">CookieName.</param>
18InBlock.gif        /// <param name="cookieData">用于保存Cookie Data的<see cref="StringBuilder"/>实例。</param>
19InBlock.gif        /// <param name="size">Cookie大小。</param>
20ExpandedSubBlockEnd.gif        /// <returns>如果成功则返回<c>true</c>,否则返回<c>false</c></returns>

21InBlock.gif        [DllImport("wininet.dll", SetLastError = true)]
22InBlock.gif        public static extern bool InternetGetCookie(
23InBlock.gif          string url, string cookieName,
24InBlock.gif          StringBuilder cookieData, ref int size);
25ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
26InBlock.gif        /// 获取当前<see cref="Uri"/><see cref="CookieContainer"/>实例。
27InBlock.gif        /// </summary>
28InBlock.gif        /// <param name="uri">当前<see cref="Uri"/>地址。</param>
29ExpandedSubBlockEnd.gif        /// <returns>当前<see cref="Uri"/><see cref="CookieContainer"/>实例。</returns>

30ExpandedSubBlockStart.gifContractedSubBlock.gif        public static CookieContainer GetUriCookieContainer(Uri uri) dot.gif{
31InBlock.gif            CookieContainer cookies = null;
32InBlock.gif
33InBlock.gif            // 定义Cookie数据的大小。
34InBlock.gif            int datasize = 256;
35InBlock.gif            StringBuilder cookieData = new StringBuilder(datasize);
36InBlock.gif
37InBlock.gif            if (!InternetGetCookie(uri.ToString(), null, cookieData,
38ExpandedSubBlockStart.gifContractedSubBlock.gif              ref datasize)) dot.gif{
39InBlock.gif                if (datasize < 0)
40InBlock.gif                    return null;
41InBlock.gif
42InBlock.gif                // 确信有足够大的空间来容纳Cookie数据。
43InBlock.gif                cookieData = new StringBuilder(datasize);
44InBlock.gif                if (!InternetGetCookie(uri.ToString(), null, cookieData,
45InBlock.gif                  ref datasize))
46InBlock.gif                    return null;
47ExpandedSubBlockEnd.gif            }

48InBlock.gif
49InBlock.gif
50ExpandedSubBlockStart.gifContractedSubBlock.gif            if (cookieData.Length > 0dot.gif{
51InBlock.gif                cookies = new CookieContainer();
52InBlock.gif                cookies.SetCookies(uri, cookieData.ToString().Replace(';'','));
53ExpandedSubBlockEnd.gif            }

54InBlock.gif            return cookies;
55ExpandedSubBlockEnd.gif        }

56InBlock.gif
57ExpandedSubBlockEnd.gif    }

58ExpandedBlockEnd.gif}
  是不是相当简单阿,希望对大家有一点用处。

相关文章:

  • 一个实例来简单的说明接口
  • ASP.NET 2.0 Web Part编程之定制Web Part
  • .NET 指南:抽象化实现的基类
  • 浮动静态路由
  • 范伟导老师Sniffer课程资料
  • 春节期间新闻回顾:思科微软多事 熊猫烧香完事
  • Windows Mobile 6 SDK 正式发布!
  • 怎样用javascript操作ftb编辑区内容
  • 局域网防雷电***实用解决方案
  • 系统不显示桌面的原因和解决方法
  • 让Windows下的驱动乖乖在Linux中安家!
  • Linux下文件和目录的颜色代表的含义
  • 哈哈,毒霸可以直接关闭自动播放功能,真是太棒了
  • cpu
  • TCP/IP协议
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • css系列之关于字体的事
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • extjs4学习之配置
  • Java的Interrupt与线程中断
  • JSDuck 与 AngularJS 融合技巧
  • JS专题之继承
  • Laravel核心解读--Facades
  • Spring Cloud Feign的两种使用姿势
  • text-decoration与color属性
  • vuex 学习笔记 01
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 初识 beanstalkd
  • 和 || 运算
  • 理解在java “”i=i++;”所发生的事情
  • 普通函数和构造函数的区别
  • 如何实现 font-size 的响应式
  • 突破自己的技术思维
  • 微信小程序--------语音识别(前端自己也能玩)
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 在Unity中实现一个简单的消息管理器
  • 白色的风信子
  • ​Spring Boot 分片上传文件
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (3)(3.5) 遥测无线电区域条例
  • (C#)获取字符编码的类
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)php投票系统 毕业设计 121500
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载