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


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

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

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

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

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

    54            return cookies;
    55        }

    56
    57    }

    58}
      是不是相当简单阿,希望对大家有一点用处。
  • 相关阅读:
    怎么卸载Apache_pn服务PHPnow使用问题
    没有该栏目数据 可能缓存文件(data/cache/inc_catalog_base.inc)没有更新请检查是否有写入权限
    用css实现网页背景渐变
    为页面添加正确的doctype声明W3C标准
    js:全部替换的函数,用正则表达式解决,js的全部替换
    真够剽悍的——读罗永浩《我的奋斗》
    Auto你的IT——AutoIt是啥?
    书评:软件设计精要与模式
    程序员应知——破窗与童子军军规
    开发人员用的提交测试环境的AutoIT脚本
  • 原文地址:https://www.cnblogs.com/liping13599168/p/615122.html
Copyright © 2020-2023  润新知