zoukankan      html  css  js  c++  java
  • C#微信开发之旅(二):基础类之HttpClientHelper(更新:SSL安全策略)

    包含通过HttpClient发起get或post请求的方法,所有调用微信接口的操作都通过此类。话不多说,直接上代码:

    2014-10-31代码更新:微信SSL安全策略调整,关闭掉SSLv2、SSLv3版本支持,不再支持部分使用SSLv2、 SSLv3或更低版本的客户端调用。

      1     public class HttpClientHelper
      2     {
      3         /// <summary>
      4         /// get请求
      5         /// </summary>
      6         /// <param name="url"></param>
      7         /// <returns></returns>
      8         public static string GetResponse(string url)
      9         {
     10             if (url.StartsWith("https"))
     11                 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
     12 
     13             HttpClient httpClient = new HttpClient();
     14             httpClient.DefaultRequestHeaders.Accept.Add(
     15                new MediaTypeWithQualityHeaderValue("application/json"));
     16             HttpResponseMessage response = httpClient.GetAsync(url).Result;
     17 
     18             if (response.IsSuccessStatusCode)
     19             {
     20                 string result = response.Content.ReadAsStringAsync().Result;
     21                 return result;
     22             }
     23             return null;
     24         }
     25 
     26         public static T GetResponse<T>(string url)
     27             where T : class,new()
     28         {
     29             if (url.StartsWith("https"))
     30                 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
     31 
     32             HttpClient httpClient = new HttpClient();
     33             httpClient.DefaultRequestHeaders.Accept.Add(
     34                new MediaTypeWithQualityHeaderValue("application/json"));
     35             HttpResponseMessage response = httpClient.GetAsync(url).Result;
     36 
     37             T result = default(T);
     38 
     39             if (response.IsSuccessStatusCode)
     40             {
     41                 Task<string> t = response.Content.ReadAsStringAsync();
     42                 string s = t.Result;
     43 
     44                 result = JsonConvert.DeserializeObject<T>(s);
     45             }
     46             return result;
     47         }
     48 
     49         /// <summary>
     50         /// post请求
     51         /// </summary>
     52         /// <param name="url"></param>
     53         /// <param name="postData">post数据</param>
     54         /// <returns></returns>
     55         public static string PostResponse(string url, string postData)
     56         {
     57             if (url.StartsWith("https"))
     58                 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
     59 
     60             HttpContent httpContent = new StringContent(postData);
     61             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
     62             HttpClient httpClient = new HttpClient();
     63 
     64             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
     65 
     66             if (response.IsSuccessStatusCode)
     67             {
     68                 string result = response.Content.ReadAsStringAsync().Result;
     69                 return result;
     70             }
     71             return null;
     72         }
     73 
     74         /// <summary>
     75         /// 发起post请求
     76         /// </summary>
     77         /// <typeparam name="T"></typeparam>
     78         /// <param name="url">url</param>
     79         /// <param name="postData">post数据</param>
     80         /// <returns></returns>
     81         public static T PostResponse<T>(string url, string postData)
     82             where T : class,new()
     83         {
     84             if (url.StartsWith("https"))
     85                 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
     86 
     87             HttpContent httpContent = new StringContent(postData);
     88             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
     89             HttpClient httpClient = new HttpClient();
     90 
     91             T result = default(T);
     92 
     93             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
     94 
     95             if (response.IsSuccessStatusCode)
     96             {
     97                 Task<string> t = response.Content.ReadAsStringAsync();
     98                 string s = t.Result;
     99 
    100                 result = JsonConvert.DeserializeObject<T>(s);
    101             }
    102             return result;
    103         }
    104 
    105         /// <summary>
    106         /// V3接口全部为Xml形式,故有此方法
    107         /// </summary>
    108         /// <typeparam name="T"></typeparam>
    109         /// <param name="url"></param>
    110         /// <param name="xmlString"></param>
    111         /// <returns></returns>
    112         public static T PostXmlResponse<T>(string url, string xmlString)
    113             where T : class,new()
    114         {
    115             if (url.StartsWith("https"))
    116                 System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
    117 
    118             HttpContent httpContent = new StringContent(xmlString);
    119             httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    120             HttpClient httpClient = new HttpClient();
    121 
    122             T result = default(T);
    123 
    124             HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
    125 
    126             if (response.IsSuccessStatusCode)
    127             {
    128                 Task<string> t = response.Content.ReadAsStringAsync();
    129                 string s = t.Result;
    130 
    131                 result = XmlDeserialize<T>(s);
    132             }
    133             return result;
    134         }
    135 
    136         /// <summary>
    137         /// 反序列化Xml
    138         /// </summary>
    139         /// <typeparam name="T"></typeparam>
    140         /// <param name="xmlString"></param>
    141         /// <returns></returns>
    142         public static T XmlDeserialize<T>(string xmlString) 
    143             where T : class,new ()
    144         {
    145             try
    146             {
    147                 XmlSerializer ser = new XmlSerializer(typeof(T));
    148                 using (StringReader reader = new StringReader(xmlString))
    149                 {
    150                     return (T)ser.Deserialize(reader);
    151                 }
    152             }
    153             catch (Exception ex)
    154             {
    155                 throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);
    156             }
    157 
    158         }
    159     }
  • 相关阅读:
    容器虚拟化之LXC(LinuX Container)
    Twemproxy+Keepalived+Redis
    Haproxy+Keepalived+Nginx
    Redis-sentinel集群
    Server2008r2 指定默认用户自动登录--注册表
    .Net Core应用框架Util介绍(二) 转
    .Net Core应用框架Util介绍(一)转
    一分钟教你知道乐观锁和悲观锁的区别
    设置DataTable行属性
    js中的内置对象
  • 原文地址:https://www.cnblogs.com/hetring/p/4029335.html
Copyright © 2011-2022 走看看