下面是封装好的winhttp类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Thunder
{

    /// <summary>
    /// COM对象的后期绑定调用类库
    /// </summary>
    public class ComObject
    {
        private System.Type _ObjType;
        private object ComInstance;
        /*public DxComObject()
        {
            throw new
        }*/
        public ComObject(string ComName)
        {
            //根据COM对象的名称创建COM对象
            _ObjType = System.Type.GetTypeFromProgID(ComName);
            if (_ObjType == null)
                throw new Exception("指定的COM对象名称无效");
            ComInstance = System.Activator.CreateInstance(_ObjType);
        }

        public System.Type ComType
        {
            get { return _ObjType; }
        }

        //执行的函数
        public object DoMethod(string MethodName, object[] args)
        {
            return ComType.InvokeMember(MethodName, System.Reflection.BindingFlags.InvokeMethod, null, ComInstance, args);
        }

        public object DoMethod(string MethodName, object[] args, System.Reflection.ParameterModifier[] ParamMods)
        {
            return ComType.InvokeMember(MethodName, System.Reflection.BindingFlags.InvokeMethod, null, ComInstance, args, ParamMods, null, null);
        }
        //获得属性与设置属性
        public object this[string propName]
        {
            get
            {
                return _ObjType.InvokeMember(propName, System.Reflection.BindingFlags.GetProperty, null, ComInstance, null);
            }
            set
            {
                _ObjType.InvokeMember(propName, System.Reflection.BindingFlags.SetProperty, null, ComInstance, new object[] { value });
            }
        }
    }

    /// <summary>
    /// WinHttp对象库
    /// </summary>
    public class WinHttp
    {
        private ComObject HttpObj;
        private string _ContentType;
        private int _ContentLength;
        private bool _Active;
        private System.Collections.ArrayList PostDataList;//提交的数据字段
        public WinHttp()
        {
            //构建WinHttp对象
            HttpObj = new ComObject("WinHttp.WinHttpRequest.5.1");
            _ContentType = "application/x-www-form-urlencoded";
            _ContentLength = ;
            PostDataList = new System.Collections.ArrayList();
        }

        //提交参数信息的个数
        public int PostDataCount
        {
            get{return PostDataList.Count;}
        }

        //设置Content-Type属性
        public string ContentType
        {
            get{return _ContentType;}
            set
            {
                if(!_Active) _ContentType = value;
                )
                {
                    _ContentType = value;
                    SetRequestHeader("Content-Type",_ContentType);
                }
            }
        }

        //对象是否是打开状态
        public bool Active
        {
            get{return _Active;}
        }

        //设置Send数据的长度
        public int ContentLength
        {
            get{return _ContentLength;}
            set
            {
                if(!_Active) _ContentLength = value;
                else if(_ContentLength != value)
                {
                    _ContentLength = value;
                    HttpObj.DoMethod(]{"Content-Length",value});
                }
            }
        }

        //执行之后返回的结果
        public string ResponseBody
        {
            get
            {
                if(_Active)
                {
                    ComObject AdoStream = new ComObject("Adodb.Stream");
                    AdoStream[;
                    AdoStream[;
                    AdoStream.DoMethod("Open",new object[]{});
                    AdoStream.DoMethod(]{HttpObj["ResponseBody"]});
                    AdoStream[;
                    AdoStream[;
                    AdoStream["Charset"] = "GB2312";
                    return AdoStream["ReadText"].ToString();
                }
                else return "";
            }
        }

        //设定请求头
        public string SetRequestHeader(string Header,object Value)
        {
            object obj;
            obj = HttpObj.DoMethod("SetRequestHeader",new object[]{Header,Value});
            if(obj != null) return obj.ToString();
            else return "True";
        }

        //打开URL执行OpenMethod方法,Async指定是否采用异步方式调用,异步方式不会阻塞
        public string Open(string OpenMethod,string URL,bool Async)
        {
            object obj;
            obj = HttpObj.DoMethod("Open",new object[]{OpenMethod,URL,Async});
            if (obj != null)
            {
                _Active = false;
                return obj.ToString();
            }
            else
            {
                SetRequestHeader("Content-Type",_ContentType);
                SetRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
                ) SetRequestHeader("Content-Length",_ContentLength);
                _Active = true;
                return "True";
            }
        }            

        //发送数据
        public string Send(string body)
        {
            if(!_Active) return "False";
            object obj;
            obj = HttpObj.DoMethod(]{body});
            if(obj != null) return obj.ToString();
            else return "True";
        }

        //清空提交信息
        public void ClearPostData()
        {
            this.PostDataList.Clear();
        }

        //增加提交数据信息
        public void AddPostField(string FieldName,object Value)
        {
            this.PostDataList.Add(FieldName+"="+Value.ToString());
        }

        //通过参数指定提交
        public string Post()
        {
            if(!_Active)
            {
                return "False";
            }
            string st="";
            ;i<this.PostDataList.Count;i++)
            {
                if(st != "") st = st + "&"+ PostDataList[i].ToString();
                else st = PostDataList[i].ToString();
            }
            this.ContentLength = st.Length;
            return Send(st);
        }

        //设置等待超时等
        public string SetTimeouts(long ResolveTimeout,long ConnectTimeout,long SendTimeout,long ReceiveTimeout)
        {
            object obj;
            obj = HttpObj.DoMethod(]{ResolveTimeout,ConnectTimeout,SendTimeout,ReceiveTimeout});
            if(obj != null) return obj.ToString();
            else return "True";
        }
        //等待数据提交完成
        public string WaitForResponse(object Timeout,out bool Succeeded)
        {
            if(!_Active) {Succeeded = false;return "";}
            object obj;
            bool succ;
            succ = false;
            System.Reflection.ParameterModifier[] ParamesM;
            ParamesM = ];
            ParamesM[] = ); // 初始化为接口参数的个数
            ParamesM[][] = true; // 设置第二个参数为返回参数

            //ParamesM[1] = true;
            ]{Timeout,succ};
            obj = HttpObj.DoMethod("WaitForResponse",ParamArray,ParamesM);
            System.Windows.Forms.MessageBox.Show(ParamArray[].ToString());
            Succeeded=].ToString());
            //Succeeded = bool.Parse(ParamArray[1].ToString);
            if(obj != null)    {return obj.ToString();}
            else return "True";
        }

        public string GetResponseHeader(string Header,ref string Value)
        {
            if(!_Active) {Value="";return "";}
            object obj;
            /*string str;
            str = "";
            System.Reflection.ParameterModifier[] Parames;
            Parames = new System.Reflection.ParameterModifier[1];
            Parames[0] = new System.Reflection.ParameterModifier (2); // 初始化为接口参数的个数
            Parames[0][1] = true; */// 设置第二个参数为返回参数
            obj = HttpObj.DoMethod(]{Header,Value});
            //Value = str;
            if(obj != null) {return obj.ToString();}
            else return "True";
        }

        public string GetAllResponseHeaders()
        {
            object obj;
            obj =HttpObj["GetAllResponseHeaders"];
            if (obj != null) { return obj.ToString(); }
            else return "True";
        }
    }
}

C#调用winhttp组件 POST登录迅雷的更多相关文章

  1. php实现ppt转图片,php调用com组件问题

    PHP 调用com组件将ppt转为图片. 需要在php.ini中开启 extension=php_com_dotnet.dllcom.allow_dcom = true   测试代码如下:   < ...

  2. Titanium中调用ios组件时语言不是本地化的解决方法

    用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? ...

  3. VS2010调用Com组件

    Com组件开发过程中用的不多,资料也不多,故记录开发Com组件中的部分问题. 在这一篇文章里,讲解了如何使用VS2010创建Com组件.现在基于该文章创建的Com组件接口,创建VC++项目来调用该接口 ...

  4. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  5. .NET通过调用Office组件导出Word文档

    .NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...

  6. 服务器端调用Word组件读取Word权限、未将对象引用到对象实例终极解决方案

    最近因为业务需要,需要在服务器上调用Word组件,结果遇到各种问题,比如检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败 ...

  7. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  8. 三界商城 ajax调用城市接口,竟然需要登录,调用的接口需要登录,如果不登录 重定向到登录

    现象 商家入驻 填写信息的 ajax请求没有数据 network->name-headers 返回302 发现调用的接口,需要登录,否则重定向登录 //初始化用户信息查询 public func ...

  9. Asp.Net调用Office组件操作时的DCOM配置 (转)

    Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...

随机推荐

  1. 利用Matlab生成一个网格化的三维球面(生成直角坐标)

    利用Matlab生成一个网格化的三维球面,分别对径向方向.经度方向和纬度方向进行网格化,代码如下: %生成一个笛卡尔坐标系下球面网格的x,y,z坐标 %r为球面距离 %nJingdu,nWeidu分别 ...

  2. Effective C++(12) 复制对象时要复制每一个成员

    问题聚焦: 负责拷贝的两个操作:拷贝构造函数和重载赋值操作符. 一句话总结,确保被拷贝对象的所有成员变量都做一份拷贝. Demo   void logCall(const std::string&am ...

  3. c++对象内存布局的理解

    我对c++对象内存布局的理解   引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基 ...

  4. 关于模板pair的用法

    在挑战程序设计竞赛中看到调用pair,就上网查了一下 类型申明有两种 template <class T1, class T2> struct pair typedef pairt< ...

  5. require.js实践

    ASP.NET MVC应用require.js实践 这里有更好的阅读体验和及时的更新:http://pchou.info/javascript/asp.net/2013/11/10/527f6ec41 ...

  6. 对linux高级用户有用的20个命令

    41.命令:ifconfig ifconfig命令用于配置网络接口信息.如配置网络接口的ip地址,默认网关地址等,以便机器能够联通互联网. 显示当前网络接口信息 viidiot@ubuntu:~$ i ...

  7. Myeclipse 10 for mac 破解版下载安装及破解方法

    下载地址:http://pan.baidu.com/share/link?shareid=463687&uk=1798617416 解压下载好的压缩包Myeclipse 10 for mac+ ...

  8. MongoDB学习之--安全和认证

    MongoDB学习之--安全和认证 本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作: 虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个 ...

  9. CKeditor 集成 CKFinder

    之前照着网上的做,遇到了一些问题,经过多次实验修改最后算是成功了,下面进行详细讲解. 一.CKeditor的配置(附件中已有最新版CKeditor和CKFinder) 1.需要下载ckeditor, ...

  10. csshack技术

    我最近想好好整理下csshack技术,但是结果很沮丧,下面我将我最初写的笔记和大家分享下. 我在单位整理的研究笔记: 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展 ...