请求rest web服务client

RestClient

  1 using System;
  2 using System.Globalization;
  3 using System.IO;
  4 using System.Net;
  5 using System.Text;
  6
  7 [assembly: CLSCompliant(true)]
  8 namespace Downloader
  9 {
 10     public enum HttpVerb
 11     {
 12         Get,
 13         Post,
 14         Put,
 15         Delete
 16     }
 17
 18     /// <summary>
 19     /// Restful Service Client
 20     /// </summary>
 21     public class RestClient
 22     {
 23         /// <summary>
 24         /// application/json
 25         /// </summary>
 26         private string _contentType = "application/json";
 27         /// <summary>
 28         /// 15000
 29         /// </summary>
 30         private int _timeout = 15000;
 31         /// <summary>
 32         /// Service Uri
 33         /// </summary>
 34         public string EndPoint { get; set; }
 35         /// <summary>
 36         /// Post || Get
 37         /// </summary>
 38         public HttpVerb Method { get; set; }
 39         /// <summary>
 40         /// Default "text/xml"
 41         /// </summary>
 42         public string ContentType { get { return _contentType; } set { _contentType = value; } }
 43         /// <summary>
 44         /// eg. "‘test‘:‘abcd‘"
 45         /// </summary>
 46         public string PostData { get; set; }
 47         /// <summary>
 48         /// TimeOut ms
 49         /// </summary>
 50         public int Timeout { get { return _timeout; } set { _timeout = value; } }
 51         /// <summary>
 52         /// Default Constructor
 53         /// </summary>
 54         public RestClient()
 55         {
 56             EndPoint = "";
 57             Method = HttpVerb.Get;
 58             ContentType = _contentType;
 59             PostData = "{}";
 60             Timeout = _timeout;
 61         }
 62         /// <summary>
 63         /// Constructor
 64         /// </summary>
 65         /// <param name="endpoint">Service Uri</param>
 66         public RestClient(string endpoint)
 67         {
 68             EndPoint = endpoint;
 69             Method = HttpVerb.Get;
 70             ContentType = _contentType;
 71             PostData = "{}";
 72             Timeout = _timeout;
 73         }
 74         /// <summary>
 75         /// Constructor
 76         /// </summary>
 77         /// <param name="endpoint">Service Uri</param>
 78         /// <param name="method">Post || Get</param>
 79         public RestClient(string endpoint, HttpVerb method)
 80         {
 81             EndPoint = endpoint;
 82             Method = method;
 83             ContentType = _contentType;
 84             PostData = "{}";
 85             Timeout = _timeout;
 86         }
 87         /// <summary>
 88         /// Constructor
 89         /// </summary>
 90         /// <param name="endpoint">Service Uri</param>
 91         /// <param name="method">Post || Get</param>
 92         /// <param name="postData">eg. "{‘test‘:‘abcd‘}"</param>
 93         public RestClient(string endpoint, HttpVerb method, string postData)
 94         {
 95             EndPoint = endpoint;
 96             Method = method;
 97             ContentType = _contentType;
 98             PostData = postData;
 99             Timeout = _timeout;
100         }
101         /// <summary>
102         /// Request server
103         /// </summary>
104         /// <returns></returns>
105         public string MakeRequest()
106         {
107             return MakeRequest("");
108         }
109         /// <summary>
110         /// Request server
111         /// </summary>
112         /// <param name="parameters">eg. "?q=1234"</param>
113         /// <returns></returns>
114         public string MakeRequest(string parameters)
115         {
116             var service = new Uri(EndPoint + parameters);
117             var request = WebRequest.Create(service);
118             request.Timeout = Timeout;
119             request.Method = Method.ToString().ToUpper(CultureInfo.CurrentCulture);
120             request.ContentLength = 0;
121             request.ContentType = ContentType;
122
123             if (Method == HttpVerb.Post)
124             {
125                 PostData = "{" + PostData + "}";
126                 var bytes =Encoding.UTF8.GetBytes(PostData);
127                 request.ContentLength = bytes.Length;
128
129                 using (var writeStream = request.GetRequestStream())
130                 {
131                     writeStream.Write(bytes, 0, bytes.Length);
132                 }
133             }
134
135             using (var response = (HttpWebResponse)request.GetResponse())
136             {
137                 var responseValue = string.Empty;
138                 if (response.StatusCode != HttpStatusCode.OK)
139                 {
140                     var message = String.Format(CultureInfo.CurrentCulture, "Request failed. Received HTTP {0}", response.StatusCode);
141                     throw new WebException(message);
142                 }
143                 using (var responseStream = response.GetResponseStream())
144                 {
145                     if (responseStream != null)
146                         using (var reader = new StreamReader(responseStream))
147                         {
148                             responseValue = reader.ReadToEnd();
149                         }
150                 }
151                 return responseValue;
152             }
153         }
154         /// <summary>
155         /// 同步更新二进制文件
156         /// </summary>
157         /// <param name="parameters">URL参数</param>
158         /// <param name="postData">表单提交参数</param>
159         /// <returns></returns>
160         public byte[] MakeRequest(string parameters, string postData)
161         {
162             var service = new Uri(EndPoint + parameters);
163             var request = WebRequest.Create(service);
164             request.Timeout = Timeout;
165             request.Method = Method.ToString().ToUpper(CultureInfo.CurrentCulture);
166             request.ContentLength = 0;
167             request.ContentType = ContentType;
168
169             if (Method == HttpVerb.Post)
170             {
171                 PostData = "{" + postData + "}";
172                 var bytes = Encoding.UTF8.GetBytes(PostData);
173                 request.ContentLength = bytes.Length;
174
175                 using (var writeStream = request.GetRequestStream())
176                 {
177                     writeStream.Write(bytes, 0, bytes.Length);
178                 }
179             }
180
181             using (var response = (HttpWebResponse)request.GetResponse())
182             {
183                 if (response.StatusCode != HttpStatusCode.OK)
184                 {
185                     var message = String.Format(CultureInfo.CurrentCulture, "Request failed. Received HTTP {0}", response.StatusCode);
186                     throw new WebException(message);
187                 }
188                 using (var result = new MemoryStream())
189                 {
190                     const int bufferLen = 2048;
191                     var buffer = new byte[bufferLen];
192                     using (var responseStream = response.GetResponseStream())
193                     {
194                         var len = responseStream.Read(buffer, 0, bufferLen);
195                         while (len > 0)
196                         {
197                             result.Write(buffer, 0, len);
198                             len = responseStream.Read(buffer, 0, bufferLen);
199                         }
200                     }
201                     return result.ToArray();
202                 }
203             }
204         }
205
206     }
207
208 }
时间: 2024-10-09 08:00:52

请求rest web服务client的相关文章

利用python httplib模块 发送Post请求测试web服务是否正常起来!

最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触这块不久属于菜鸟级别,所以在任务之前,只能上网把基于post请求的web监控了解清楚,这些资料网上很多,因为本人认为完成这类任务最重要的就是要将实现的原理研究清楚,写程序只是实现的工具,如果大的逻辑不正确,后面的都是白忙活. 了解post发送请求的原理后,利用Python的httplib模块进行逻辑

Azure机器学习入门(四)模型发布为Web服务

接Azure机器学习(三)创建Azure机器学习实验,下一步便是真正地将Azure机器学习的预测模型发布为Web服务.要启用Web服务发布任务,首先点击底端导航栏的运行即"Run"按钮运行新的收入预测实验.实验开始运行之后,底端导航栏的发布Web服务即"Publish Web Service"按钮就变为有效,如下图所示. 图 即将发布Web服务地Azure 机器学习实验 此时,点击设计模式下底端导航栏的发布Web服务即"Publish Web Servic

请求web服务过程

静态: 客户端使用web浏览器经过网络连接到服务器上,使用http协议发起一个请求,告诉服务器要得到哪一个页面,html请求发给web服务器,例如apche,从文件系统取出内容,荣国web服务器返回客户端. 动态: 如果请求jsp, asp等动态资源,先将请求发给web容器,例如tomcat,连接数据可,拼凑内容,由tomcat呈现给客户. tomcat是web容器发布jsp等动态内容 apache也是web容器解析html,php. tomcat和apache都是装在web服务器上. html

[WEB API] CLIENT 指定请求及回应格式(XML/JSON)

[Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-and-model-binding 本篇则要演练xml/json 回应 Get 定义 Header:Content-Type 定义 QueryString 请求 Post POST json 数据 POST xml 数据 回应 Get 定义 Header:Content-Type 测试工具:本来想用 p

根据DNS的A记录负载均衡web服务请求

做为论坛站点:有两种类型的数据要处理:  1.结构化的数据:  如:用户名.用户发表的评论等,这些可以存储在关系型数据库中:  2.非结构化的数据:如:用户上传的附件.则存储到文件系统中. 论坛的架构: 使用两台httpd服务器来服务用户的访问请求.使用DNS的A记录做客户访问轮循到这两台服务器上.php做为httpd的模块工作. 论坛架构如下图所示: 一.搭建NFS文件共享服务器. 要点:保证192.168.60.99与192.168.60.40两台httpd服务器的进程能够往共享文件系统(目

HTTP协议基础与web服务的重定向,跳转以及请求转发

JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相比,它们符合HTTP协议,所以首先从http协议入手,回顾一些基本的内容,而后根据协议来总结常用的知识点. 首先来介绍一下dos环境下简单的http发送报文,接收报文的方法.运行输入cmd,打开命令提示符输入telnet 127.0.0.1 8080,回车后会出现一个输入界面,但此时输入的字符都无法

Web 服务编程,REST 与 SOAP

REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transfer)是 Roy Fielding 提出的一个描述互联系统架构风格的名词.为什么称为 REST?Web 本质上由各种各样的资源组成,资源由 URI 唯一标识.浏览器(或者任何其它类似于浏览器的应用程序)将展示出该资源的一种表现方式,或者一种表现状态.如果用户在该页面中定向到指向其它资源的链接,则将访问该资源,并表现出它的状态.这意味着客户端应用程序随

利用OpenShift托管Node.js Web服务进行微信公众号开发

最近写了一个微信的翻译机器人.用户只要关注该微信号,发送英文的消息,就能收到中文翻译的回复.后台是用Node.js写的,托管在OpenShift的Paas平台上.翻译过程实际上是调用微软的Bing translation API做的,代码中用到了alexu84的bing-translate和JacksonTian的wechat这两个npm模块.下面把做的过程详细说一下. 1. 微信公众号开发 首先是要到https://mp.weixin.qq.com 申请一个公众号,并申请成为开发者.目前个人只

HTTP的持久连接对Web服务性能的影响

我们的 Web 页面通常有很多对像(Object)组成.如:jss 样式表.图片.scripts.文档等.所以用户浏览一个网页文件时候,要向 Web 服务器发送多次请求(要从服务器上获取一个Object就要向服务器发送一个请求),浏览器根据 jss 样式表把从服务器获取的这些html页面对象合成一个完整的html页面展示给用户.        最早我们的浏览器是单线程的,意味着一次只能向浏览器发送一个Object请求,等到该Object传输完成了,再向服务发送第二个Object的请求.我们把它称