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 国际化
SpringMVC学习系列(8) 之 国际化 在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢? ...
- C# 各种相对路径
//获取当前可执行的exe的文件名 string str1 = Process.GetCurrentProcess().MainModule.FileNa ...
- Windows Store 应用
使用 Project Siena 生成一个 Windows Store 应用 继 App Studio 之后微软又一力作 Project Siena [Win8 应用神器]给初学开发 或 对 Wi ...
- .net实现依赖注入
.net实现依赖注入 1. 问题的提出 开发中,尤其是大型项目的开发中,为了降低模块间.类间的耦合关系,比较提倡基于接口开发,但在实现中也必须面临最终是“谁”提供实体类的问题.Martin Fowle ...
- 图解 ENGLISH
人在江湖,总得会几门手艺,英语必不可缺,下面几张图诠释了什么叫强大:
- backbonejs mvc框架
backbonejs mvc框架的增删查改实例 一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https ...
- [google面试CTCI] 1-6.图像旋转问题
[字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ...
- begin 2~~~
发觉自己是一个偏向geek的coder 其实自己没有像一个pure coder一样,lost in code world,我总喜欢做一些东西,奇怪的: 联通的多拨破解 openwrt的入门级研究 pf ...
- DevExpress 学习使用之 ComboBoxEdit
往 StatusBar 上添加各种部件,似乎都被包装成了 barEditItem 的方式,其 Edit 属性就是具体的部件.以 ComboBoxEdit 为例,关于 ComboBoxEdit 的一些设 ...
- MVC 静态化的ActionFilter
在MVC中,需要对某些页面进行静态化,用ActionFilter来做静态化,把页面存到缓存中.如下代码所示,其中Result.RenderString是扩展方法,第一次缓存的时候,Action代码会运 ...