C#调用winhttp组件 POST登录迅雷
下面是封装好的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登录迅雷的更多相关文章
- php实现ppt转图片,php调用com组件问题
PHP 调用com组件将ppt转为图片. 需要在php.ini中开启 extension=php_com_dotnet.dllcom.allow_dcom = true 测试代码如下: < ...
- Titanium中调用ios组件时语言不是本地化的解决方法
用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? ...
- VS2010调用Com组件
Com组件开发过程中用的不多,资料也不多,故记录开发Com组件中的部分问题. 在这一篇文章里,讲解了如何使用VS2010创建Com组件.现在基于该文章创建的Com组件接口,创建VC++项目来调用该接口 ...
- VC中调用COM组件的方法(转载)
原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- 服务器端调用Word组件读取Word权限、未将对象引用到对象实例终极解决方案
最近因为业务需要,需要在服务器上调用Word组件,结果遇到各种问题,比如检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败 ...
- vc中调用Com组件的方法详解
vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGet ...
- 三界商城 ajax调用城市接口,竟然需要登录,调用的接口需要登录,如果不登录 重定向到登录
现象 商家入驻 填写信息的 ajax请求没有数据 network->name-headers 返回302 发现调用的接口,需要登录,否则重定向登录 //初始化用户信息查询 public func ...
- Asp.Net调用Office组件操作时的DCOM配置 (转)
Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...
随机推荐
- SpringMVC中Controller
详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...
- 关于wcf跨机器访问的问题
在wcf跨机器的访问中遇到了各种无法访问的问题,本人也是在通过个人解决问题的基础上发表一下自己的经验,如果还有其他方面可能影响wcf跨机器的问题,还希望大家多多发言! 好了废话不多说了,正文如下: 1 ...
- 于快速创建 IEqualityComparer<T> 实例的类 Equality<T>
于快速创建 IEqualityComparer<T> 实例的类 Equality<T> 原文中的 Equality<T> 实现如下: 1 2 3 4 5 6 7 8 ...
- CODEFORCES#274 DIV2
A[傻逼题] 大意:给你a,b,c三个数,你可以在其中加上括号,加号,乘号,使得到的值最大 就是问你 a+b+c,a*(b+c),(a+b)*c,a*b*c,(a+c)*b 哪个最大! 我去...这不 ...
- 最小生成树算法prim and kruskal
一.最小生成树定义: 从不同顶点出发或搜索次序不同,可得到不同的生成树 生成树的权:对连通网络来说,边附上权,生成树也带权,我们把生成树各边的权值总和称为生成树的权 最小代价生成树:在一个连通网 ...
- .NET中操作IPicture、IPictureDisp
.NET中操作IPicture.IPictureDisp的小随笔 [题外话] 最近在做一个调用某实验仪器的程序,这个仪器提供了Windows上COM的接口.调用仪器的时候需要传输图片,提供的接口里 ...
- cocos2dx在Eclipse下编译报错:Cannot find module with tag 'CocosDenshion/android' in import path
在Eclipse下编译cocos2dx项目,报错如下: Android NDK: jni/Android.mk: Cannot find module with tag 'CocosDenshion/ ...
- 设置 Ext.data.Store 传参的请求方式
设置 Ext.data.Store 传参的请求方式 1.extjs 给怎么给panel设背景色 设置bodyStyle:'background:#ffc;padding:10px;', var res ...
- 初始化IoC容器(Spring源码阅读)
初始化IoC容器(Spring源码阅读) 我们到底能走多远系列(31) 扯淡: 有个问题一直想问:各位你们的工资剩下来会怎么处理?已婚的,我知道工资永远都是不够的.未婚的你们,你们是怎么分配工资的? ...
- WP自定义字体
IOS7的数字真的很好看啊,于是想放在自己的应用中.在网上找了下,发现这个字体叫HelveticaNeueLTPro-UltLt,于是随便在某个字体网站下了这个字体.拖到项目里换字体,但是,悲剧开始了 ...