http请求代理类

一、http请求代理类

public class HttpProxy
	{
		/// <summary>
		/// get请求
		/// </summary>
		/// <param name="url">接口地址</param>
		/// <returns></returns>
		public static string HttpGet(string url)
		{
			string result = string.Empty;
			try
			{
				//创建http 请求
				HttpWebRequest httpRequset = (HttpWebRequest)HttpWebRequest.Create(url);
				httpRequset.Method = "GET";
				httpRequset.ContentType = "text/html;charset=UTF-8";
				httpRequset.Headers.Add("ignore-identity", "true");
				HttpWebResponse response = (HttpWebResponse)httpRequset.GetResponse();
				using (Stream responseStream = response.GetResponseStream())
				{
					using (StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")))
					{
						result = sReader.ReadToEnd();
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return result;
		}

		/// <summary>
		/// post请求
		/// </summary>
		/// <param name="url">接口地址</param>
		/// <param name="paramData">json格式</param>
		/// <param name="headerDic">自定义header信息</param>
		/// <returns></returns>
		public static string HttpPost(string url, string paramData, Dictionary<string, string> headerDic = null)
		{
			CookieContainer cookie = new CookieContainer();
			string result = string.Empty;
			try
			{
				HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url);
				wbRequest.Headers.Add("ignore-identity", "true");
				wbRequest.CookieContainer = cookie;
				wbRequest.Method = "POST";
				wbRequest.ContentType = "application/x-www-form-urlencoded";
				wbRequest.ContentLength = Encoding.UTF8.GetByteCount(paramData);
				if (headerDic != null && headerDic.Count > 0)
				{
					foreach (var item in headerDic)
					{
						wbRequest.Headers.Add(item.Key, item.Value);
					}
				}
				using (Stream requestStream = wbRequest.GetRequestStream())
				{
					using (StreamWriter swrite = new StreamWriter(requestStream))
					{
						swrite.Write(paramData);
					}
				}
				HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();
				wbResponse.Cookies = cookie.GetCookies(wbResponse.ResponseUri);
				using (Stream responseStream = wbResponse.GetResponseStream())
				{
					using (StreamReader sread = new StreamReader(responseStream))
					{
						result = sread.ReadToEnd();
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return result;
		}
	}

二、客户端调用

public class RPCService
	{
		public dynamic GetRPCData()
		{
			var url = ConfigSettings.SubjectStatRpcUrl;// http://localhost:61558/stat/RpcService/SubjectStat.ashx
			var par = new
			{
				functionName = "GetSubjectStatByProgress",
				token = "c4b500e643f24dc78da2229e24557de3",
				codeList = new List<int> { 9527, 1434 }
			};
			var parJson = System.Web.HttpUtility.UrlEncode(JsonConvert.SerializeObject(par));
			parJson = $"cmd={parJson}";
			//get 请求
			var data = JsonConvert.DeserializeObject<dynamic>(HttpProxy.HttpGet($"{url}?{parJson}"));
			// post 请求
			var data1 = JsonConvert.DeserializeObject<dynamic>(HttpProxy.HttpPost(url, parJson));
			return data;
		}
	}

 三、服务端代码

public class SubjectStat : IHttpHandler
	{
		private ISubjectStatRpcService<dynamic> _iSubjectStatRpcService = new SubjectStatRpcService<dynamic>();

		public void ProcessRequest(HttpContext context)
		{

			context.Response.ContentType = "application/json";
			RpcService(context);
		}

		/// <summary>
		/// 调用服务
		/// </summary>
		/// <param name="context"></param>
		private void RpcService(HttpContext context)
		{
			try
			{
				//启用cmd={cname:"rpc",isAsync:true,functionName:"getDiscussByFile",fileCode:"",userId:""}
				var command = Json.Decode(System.Web.HttpUtility.UrlDecode(context.Request["cmd"]));
				// 方法名称
				if (string.IsNullOrWhiteSpace(command.functionName))
				{
					context.Response.Write(Json.Encode(new HandlerResult(HttpStatusCode.InternalServerError, "参数funcName不能为空")));
				}
				// 登录验证暂时没有加,每个接口都传了一个token,是否需要验证是否登录
				if (string.IsNullOrWhiteSpace(command.token))
				{
					context.Response.Write(Json.Encode(new HandlerResult(HttpStatusCode.InternalServerError, "参数token不能为空")));
				}
				//根据函数名调取相应的数据
				switch (command.functionName.ToLower())
				{
					case "getsubjectstatbydeptlist"://按照部门统计
						context.Response.Write(Json.Encode(GetSubjectStatByDeptList(command))); break;
					case "getsubjectstatbyprogress"://按照课题研究进度统计
						context.Response.Write(Json.Encode(GetSubjectStatByProgress(command))); break;
					default:
						context.Response.Write(Json.Encode(new HandlerResult(HttpStatusCode.InternalServerError, "调用的方法不存在"))); break;
				}
			}
			catch (Exception ex)
			{
				context.Response.Write(Json.Encode(new HandlerResult(HttpStatusCode.InternalServerError, ex.Message)));
			}
		}

		/// <summary>
		/// 按照部门统计
		/// </summary>
		/// <returns></returns>
		private HandlerResult GetSubjectStatByDeptList(dynamic par)
		{
			// 参数验证 Todo
			var allCount = 0;
			SubjectByDeptView totalRowData = new SubjectByDeptView();
			var ret = new object();
			return new HandlerResult(HttpStatusCode.OK, ret);
		}

		/// <summary>
		/// 按照课题研究进度统计
		/// </summary>
		/// <returns></returns>
		private HandlerResult GetSubjectStatByProgress(dynamic par)
		{
			// 参数验证 Todo

			var allCount = 0;
			SubjectByDeptView totalRowData = new SubjectByDeptView();
			var ret = _iSubjectStatRpcService.GetSubjectStatByProgress(par);
			return new HandlerResult(HttpStatusCode.OK, ret);
		}

		public bool IsReusable
		{
			get
			{
				return false;
			}
		}
	}

原文地址:https://www.cnblogs.com/zhuanjiao/p/12175924.html

时间: 2024-10-14 22:25:54

http请求代理类的相关文章

iOS_21团购_通过block对请求工具类的代理方法进行二次封装

最终效果图: [点评]提供的工具类DPAPI 在请求完毕后,使用的是代理机制,当一次请求成功或者失败时,会调用代理的相应方法 为了将点评提供的工具类DPAPI进行二次封装, 再次定义了一个block: typedef  void(^RequestDoneCallBackBlock)(id deals,NSError *err); 该block有两个参数, 分别是成功时,服务器返回的deals字典数组 另一个参数是:请求失败时,服务器返回的失败信息 两个参数分别对应代理的两个方法(即成功.失败时分

利用wsdl.exe生成webservice代理类

根据提供的wsdl生成webservice代理类 1.开始->程序->Visual Studio 2005 命令提示 2.输入如下红色标记部分 D:/Program Files/Microsoft Visual Studio 8/VC>wsdl /language:c# /n:TestDemo /out:d:/Temp/TestService.cs D:/Temp/TestService.wsdl 在d:/Temp下就会产生一个TestService.cs 文件 注意:D:/Temp/T

解析利用wsdl.exe生成webservice代理类的详解

利用wsdl.exe生成webservice代理类:根据提供的wsdl生成webservice代理类1.开始->程序->Visual Studio 2005 命令提示2.输入如下红色标记部分D:/Program Files/Microsoft Visual Studio 8/VC>wsdl /language:c# /n:TestDemo /out:d:/Temp/TestService.cs D:/Temp/TestService.wsdl在d:/Temp下就会产生一个TestServ

黑马程序员___java动态代理类

----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象.客户不知道它是与代理打交道还是与实际对象打交道.2.为什么使用动态代理? 答:因为动态代理可以对请求进行任何处理 3.使用它有哪些好处? 答

按WSDL信息手动生成代理类

命令行: wsdl /language:c# /n:Entity /out:C:\Users\mengxianming\Desktop\Centrex_IMS_Client.cs C:\Users\mengxianming\Desktop\Centrex_IMS.1.8.0.wsdl 或 wsdl /language:c# /n:Entity /out:C:\Users\mengxianming\Desktop\Centrex_IMS_Client.cs  http://localhost/Ce

Java HttpClient4.2.x版本get、post请求工具类

公司业务需要,跟很多公司合作,经常需要请求外部http接口,而项目架构是一个比较老的框架整合,仅http请求的工具类就很多个,显得杂乱无章: 有些接口测试时,对方做了IP白名单限制的,ZIP压缩等要求,现有的http工具类无法满足要求,又不能去修改,因为很多地方在用:想引入最新HttpClient版本的依赖,确发现与现有的jar包冲突: 无耐只能使用现有的jar重新封装,具体代码演示如下: post请求方式1 /*** POST请求,超时时间必须设置* @param url* @param js

后台请求帮助类

namespace BJSoft.WXYH.Common { /// <summary> /// Http连接操作帮助类 /// </summary> public class HttpHelper { #region 预定义方变量 //默认的编码 private Encoding encoding = Encoding.Default; //Post数据编码 private Encoding postencoding = Encoding.Default; //HttpWebRe

在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件(转)

WCF服务调用可以采用两个方法,由工具SvcUtil.exe生成本地代理服务类和配置文件方式,或者采用ChannelFactory直接创建服务代理对象.本文主要采用前面一种方式来进行. SvcUtil.exe位于:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目录下,可以将本工具添加到VS2010的工具菜单中,以方便使用: VS菜单->工具->外部工具->添加->在“命令”文本框选取其路径如下:C:\Program Files\M

Spring AOP 实现原理(三) 使用 使用 CGLIB 生成代理类

CGLIB(Code Generation Library),简单来说,就是一个代码生成类库.它可以在运行时候动态是生成某个类的子类. 此处使用前面定义的 Chinese 类,现在改为直接使用 CGLIB 来生成代理,这个代理类同样可以实现 Spring AOP 代理所达到的效果. 下面先为 CGLIB 提供一个拦截器实现类: public class AroundAdvice implements MethodInterceptor { public Object intercept(Obje