1. /// <summary>
  2. /// Http请求操作类之HttpWebRequest
  3. /// </summary>
  4. public class HttpHelper
  5. {
  6. #region properties
  7.  
  8. private ILog _logger;
  9. private readonly Encoding ENCODING = Encoding.UTF8;
  10. #endregion
  11.  
  12. #region constructor
  13. public HttpHelper()
  14. {
  15. this._logger = LogManager.GetLogger("HttpHelper");
  16. }
  17. #endregion
  18.  
  19. #region public methods
  20.  
  21. /// <summary>
  22. /// Post
  23. /// </summary>
  24. /// <param name="url"></param>
  25. /// <param name="msg"></param>
  26. /// <returns></returns>
  27. public string HTTPJsonPost(string url, string msg)
  28. {
  29. string result = string.Empty;
  30. try
  31. {
  32. this._logger.InfoFormat("HTTPJsonPostUrl:{0}", url);
  33. this._logger.InfoFormat("HTTPJsonPostMsg:{0}", msg);
  34. result = CommonHttpRequest(msg, url, "POST");
  35. //if (!result.Contains("\"Code\":200"))
  36. //{
  37. // throw new Exception(result);
  38. //}
  39. }
  40. catch (WebException ex)
  41. {
  42. if (ex.Response != null)
  43. {
  44. HttpWebResponse response = (HttpWebResponse)ex.Response;
  45. Console.WriteLine("Error code: {0}", response.StatusCode);
  46. switch (response.StatusCode)
  47. {
  48. case HttpStatusCode.BadRequest:
  49. case HttpStatusCode.Forbidden:
  50. case HttpStatusCode.InternalServerError:
  51. {
  52. using (Stream data = response.GetResponseStream())
  53. {
  54. using (StreamReader reader = new StreamReader(data))
  55. {
  56. string text = reader.ReadToEnd();
  57. throw new Exception(text);
  58. }
  59. }
  60. }
  61. break;
  62. }
  63.  
  64. }
  65. this._logger.ErrorFormat("HTTPJsonPost异常:{0}", ex.Message);
  66. }
  67. catch (Exception ex)
  68. {
  69. this._logger.ErrorFormat("HTTPJsonPost异常:{0}", ex.Message);
  70. throw new Exception(ex.Message);
  71.  
  72. }
  73. return result;
  74. }
  75.  
  76. /// <summary>
  77. /// Get
  78. /// </summary>
  79. /// <param name="url"></param>
  80. /// <returns></returns>
  81. public string HTTPJsonGet(string url)
  82. {
  83. string result = string.Empty;
  84. try
  85. {
  86. this._logger.InfoFormat("HTTPJsonPostUrl:{0}", url);
  87. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  88. request.ContentType = "application/json";
  89. request.Method = "GET";
  90. HttpWebResponse resp = request.GetResponse() as HttpWebResponse;
  91. System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), this.ENCODING);
  92. result = reader.ReadToEnd();
  93. }
  94. catch (Exception ex)
  95. {
  96. this._logger.ErrorFormat("HTTPJsonGet异常:{0}", ex.Message);
  97. }
  98. return result;
  99. }
  100.  
  101. /// <summary>
  102. /// Put
  103. /// </summary>
  104. /// <param name="data"></param>
  105. /// <param name="uri"></param>
  106. /// <returns></returns>
  107. public string HTTPJsonDelete(string url, string data)
  108. {
  109. return CommonHttpRequest(data, url, "DELETE");
  110. }
  111.  
  112. /// <summary>
  113. /// Put
  114. /// </summary>
  115. /// <param name="data"></param>
  116. /// <param name="uri"></param>
  117. /// <returns></returns>
  118. public string HTTPJsonPut(string url, string data)
  119. {
  120. return CommonHttpRequest(data, url, "PUT");
  121. }
  122.  
  123. #endregion
  124.  
  125. #region private
  126.  
  127. public string CommonHttpRequest(string data, string uri, string type)
  128. {
  129.  
  130. //Web访问对象,构造请求的url地址
  131. string serviceUrl = uri;
  132.  
  133. //构造http请求的对象
  134. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
  135. myRequest.Timeout = 600000;
  136. //转成网络流
  137. byte[] buf = this.ENCODING.GetBytes(data);
  138. //设置
  139. myRequest.Method = type;
  140. myRequest.ContentLength = buf.LongLength;
  141. myRequest.ContentType = "application/json";
  142.  
  143. //将客户端IP加到头文件中
  144. string sRealIp = GetHostAddress();
  145. if (!string.IsNullOrEmpty(sRealIp))
  146. {
  147. myRequest.Headers.Add("ClientIp", sRealIp);
  148. }
  149.  
  150. using (Stream reqstream = myRequest.GetRequestStream())
  151. {
  152. reqstream.Write(buf, 0, (int)buf.Length);
  153. }
  154. HttpWebResponse resp = myRequest.GetResponse() as HttpWebResponse;
  155. System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), this.ENCODING);
  156. string ReturnXml = reader.ReadToEnd();
  157. reader.Close();
  158. resp.Close();
  159. return ReturnXml;
  160. }
  161. #endregion
  162.  
  163. /// <summary>
  164. /// 获取客户端IP地址(无视代理)
  165. /// </summary>
  166. /// <returns>若失败则返回回送地址</returns>
  167. public static string GetHostAddress()
  168. {
  169. try
  170. {
  171. string userHostAddress = HttpContext.Current.Request.UserHostAddress;
  172.  
  173. if (string.IsNullOrEmpty(userHostAddress))
  174. {
  175. userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  176. }
  177.  
  178. //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
  179. if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
  180. {
  181. return userHostAddress;
  182. }
  183. return "127.0.0.1";
  184. }
  185. catch
  186. {
  187. return "127.0.0.1";
  188. }
  189.  
  190. }
  191.  
  192. /// <summary>
  193. /// 检查IP地址格式
  194. /// </summary>
  195. /// <param name="ip"></param>
  196. /// <returns></returns>
  197. public static bool IsIP(string ip)
  198. {
  199. return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
  200. }
  201.  
  202. public static long ConvertDataTimeLong(DateTime dt)
  203. {
  204. DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  205. TimeSpan toNow = dt.Subtract(dtStart);
  206. long timeStamp = toNow.Ticks;
  207. timeStamp = long.Parse(timeStamp.ToString().Substring(0, timeStamp.ToString().Length - 4));
  208. return timeStamp;
  209. }
  210.  
  211. public static DateTime ConvertLongDateTime(long d)
  212. {
  213. DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  214. long lTime = long.Parse(d + "0000");
  215. TimeSpan toNow = new TimeSpan(lTime);
  216. DateTime dtResult = dtStart.Add(toNow);
  217. return dtResult;
  218. }
  219.  
  220.    private string ConvertToJsonString<T>(T model)
  221. {
  222. DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
  223. var stream = new MemoryStream();
  224. serializer.WriteObject(stream, model);
  225.  
  226. byte[] dataBytes = new byte[stream.Length];
  227.  
  228. stream.Position = 0;
  229.  
  230. stream.Read(dataBytes, 0, (int)stream.Length);
  231.  
  232. string dataString = Encoding.UTF8.GetString(dataBytes);
  233. return dataString;
  234. }
  235. }
  236.  
  237. /// <summary>
  238. /// Http请求操作类之WebClient
  239. /// </summary>
  240.  
  241. public static class WebClientHelper
  242. {
  243. public static string Post(string url, string jsonData)
  244. {
  245. var client = new WebClient();
  246. client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
  247. client.Encoding = System.Text.Encoding.UTF8;
  248. byte[] data = Encoding.UTF8.GetBytes(jsonData);
  249. byte[] responseData = client.UploadData(new Uri(url), "POST", data);
  250. string response = Encoding.UTF8.GetString(responseData);
  251. return response;
  252. }
  253.  
  254. public static void PostAsync(string url, string jsonData, Action<string> onComplete, Action<Exception> onError)
  255. {
  256. var client = new WebClient();
  257. client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
  258. client.Encoding = System.Text.Encoding.UTF8;
  259. byte[] data = Encoding.UTF8.GetBytes(jsonData);
  260.  
  261. client.UploadDataCompleted += (s, e) =>
  262. {
  263. if (e.Error == null && e.Result != null)
  264. {
  265. string response = Encoding.UTF8.GetString(e.Result);
  266. onComplete(response);
  267. }
  268. else
  269. {
  270. onError(e.Error);
  271. }
  272. };
  273.  
  274. client.UploadDataAsync(new Uri(url), "POST", data);
  275. }
  276. }
  277.  
  278.  
  279.  
  280. http请求工具类

  

C# http请求工具类的更多相关文章

  1. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  2. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  5. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  6. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  7. C#实现的UDP收发请求工具类实例

    本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...

  8. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  9. 【原创】标准HTTP请求工具类

    以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...

  10. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

随机推荐

  1. hdu 6205 card card card 尺取法

    card card card Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. leetcode --165--php

    class Solution { /** * @param String $version1 * @param String $version2 * @return Integer */ functi ...

  3. springboot启动流程(十)springboot自动配置机制

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 在第七篇文章中我们了解到,refresh过程将会调用ConfigurationClass ...

  4. 使用Lua编写Wireshark插件解析KCP UDP包,解析视频RTP包

    前段时间写了一个局域网音视频通话的程序,使用开源 KCP 来实现可靠UDP传输. 通过研究发现KCP在发包时,会在数据包前面加上它自己的头.如果数据包较小,KCP可能会把多个数据包合成一个包发送,提高 ...

  5. form表单详解

    form表单 form是一个复杂的系统标签,其内部又可包含很多的一些输入标签 例如input 输入文本标签  checkbox 多选标签等等 form表单有几个属性我们需要注意一下 1:action属 ...

  6. 数据库之sqlite

    数据创建数据 CREATE TABLE IF NOT EXISTS ArpAudit (ID INTEGER PRIMARY KEY autoincrement NOT NULL, UserName ...

  7. Image Processing and Analysis_15_Image Registration:a survey of image registration techniques——1992

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  8. SVN版本控制—branches、trunk、tag篇

    新建资源仓库时,可选择默认创建三个文件夹.这三个文件夹分别是[trunk][branches][tags] [Trunk] 一般用于存放目前项目主线,也就是项目所有功能模块的集合体,一整个项目所有代码 ...

  9. doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

    在settings.py中增加 INSTALLED_APPS = [ ... 'django.contrib.sites', ] 问题就解决了.什么原因.——不知道.. 具体请看: https://s ...

  10. python-----多进程笔记

    多进程笔记: 在Python中多进程的创建方式对比: 1.在Python中,可以通过os.fork()创建子进程,但是这种方式智能在'linux'和'unix'以及'mac'下面使用,不能跨平台,所以 ...