C#微信开发之旅:基础类之HttpClientHelper(更新:SSL安全策略)

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

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

public class HttpClientHelper      {          /// <summary>          /// get请求          /// </summary>          /// <param name="url"></param>          /// <returns></returns>          public static string GetResponse(string url)          {              if (url.StartsWith("https"))                  System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;                HttpClient httpClient = new HttpClient();              httpClient.DefaultRequestHeaders.Accept.Add(                 new MediaTypeWithQualityHeaderValue("application/json"));              HttpResponseMessage response = httpClient.GetAsync(url).Result;                if (response.IsSuccessStatusCode)              {                  string result = response.Content.ReadAsStringAsync().Result;                  return result;              }              return null;          }            public static T GetResponse<T>(string url)              where T : class,new()          {              if (url.StartsWith("https"))                  System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;                HttpClient httpClient = new HttpClient();              httpClient.DefaultRequestHeaders.Accept.Add(                 new MediaTypeWithQualityHeaderValue("application/json"));              HttpResponseMessage response = httpClient.GetAsync(url).Result;                T result = default(T);                if (response.IsSuccessStatusCode)              {                  Task<string> t = response.Content.ReadAsStringAsync();                  string s = t.Result;                    result = JsonConvert.DeserializeObject<T>(s);              }              return result;          }            /// <summary>          /// post请求          /// </summary>          /// <param name="url"></param>          /// <param name="postData">post数据</param>          /// <returns></returns>          public static string PostResponse(string url, string postData)          {              if (url.StartsWith("https"))                  System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;                HttpContent httpContent = new StringContent(postData);              httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");              HttpClient httpClient = new HttpClient();                HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;                if (response.IsSuccessStatusCode)              {                  string result = response.Content.ReadAsStringAsync().Result;                  return result;              }              return null;          }            /// <summary>          /// 发起post请求          /// </summary>          /// <typeparam name="T"></typeparam>          /// <param name="url">url</param>          /// <param name="postData">post数据</param>          /// <returns></returns>          public static T PostResponse<T>(string url, string postData)              where T : class,new()          {              if (url.StartsWith("https"))                  System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;                HttpContent httpContent = new StringContent(postData);              httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");              HttpClient httpClient = new HttpClient();                T result = default(T);                HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;                if (response.IsSuccessStatusCode)              {                  Task<string> t = response.Content.ReadAsStringAsync();                  string s = t.Result;                    result = JsonConvert.DeserializeObject<T>(s);              }              return result;          }            /// <summary>          /// V3接口全部为Xml形式,故有此方法          /// </summary>          /// <typeparam name="T"></typeparam>          /// <param name="url"></param>          /// <param name="xmlString"></param>          /// <returns></returns>          public static T PostXmlResponse<T>(string url, string xmlString)              where T : class,new()          {              if (url.StartsWith("https"))                  System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;                HttpContent httpContent = new StringContent(xmlString);              httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");              HttpClient httpClient = new HttpClient();                T result = default(T);                HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;                if (response.IsSuccessStatusCode)              {                  Task<string> t = response.Content.ReadAsStringAsync();                  string s = t.Result;                    result = XmlDeserialize<T>(s);              }              return result;          }            /// <summary>          /// 反序列化Xml          /// </summary>          /// <typeparam name="T"></typeparam>          /// <param name="xmlString"></param>          /// <returns></returns>          public static T XmlDeserialize<T>(string xmlString)               where T : class,new ()          {              try              {                  XmlSerializer ser = new XmlSerializer(typeof(T));                  using (StringReader reader = new StringReader(xmlString))                  {                      return (T)ser.Deserialize(reader);                  }              }              catch (Exception ex)              {                  throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);              }            }      }

更多C#微信开发之旅:基础类之HttpClientHelper(更新:SSL安全策略)相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: c#
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:delphi 实现微信开发

相关资讯