zoukankan      html  css  js  c++  java
  • C# HttpClientHelper

        public class HttpClientHelper
        {
            // 执行post操作
            public static string doPost(string url, Dictionary<string, string> parameters, int timeOutInMillisecond)
            {
                using (HttpClient client = new HttpClient())
                {
                    HttpContent content = new MyFormUrlEncodedContent(parameters);
                    Task<HttpResponseMessage> task = client.PostAsync(url, content);
                    if (task.Wait(timeOutInMillisecond))
                    {
                        HttpResponseMessage response = task.Result;
                        if (response.StatusCode == HttpStatusCode.OK)
                        {
                            Task<string> result = response.Content.ReadAsStringAsync();
                            result.Wait();
                            return result.Result;
                        }
                    }
                }
                return null;
            }
    
            public static string doPostJson(string url, string jsonData, string cookieValue, int timeOutInMillisecond)
            {
                try
                {
                    HttpClientHandler handler = new HttpClientHandler() { UseCookies = false };//手动headers添加cookies.
                    using (HttpClient client = new HttpClient(handler))
                    {
                        HttpContent requestContent = new StringContent(jsonData);
                        requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                        if (!string.IsNullOrEmpty(cookieValue))
                        {
                            requestContent.Headers.Add("Cookie", cookieValue);
                        }
                        Task<HttpResponseMessage> task = client.PostAsync(url, requestContent);
    
                        #region 构建请求方式2
                        //HttpRequestMessage requestMessage = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, requestUrl);
                        //requestMessage.Content = new StringContent(jsonData, Encoding.UTF8, "application/json");
                        //if (!string.IsNullOrEmpty(cookieValue))
                        //{
                        //    requestMessage.Headers.Add("Cookie", cookieValue);
                        //}
                        //Task<HttpResponseMessage> task = client.SendAsync(requestMessage);
                        #endregion
    
                        if (task.Wait(timeOutInMillisecond))
                        {
                            HttpResponseMessage response = task.Result;
                            if (response.StatusCode == HttpStatusCode.OK)
                            {
                                Task<string> result = response.Content.ReadAsStringAsync();
                                result.Wait();
                                string content = result.Result;
                                LogUtil.Logger.Debug("Debug:HttpClientHelper.doPostJson请求结果:" + content);
                                return content;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.Logger.Error(string.Format("Error:HttpClientHelper.doPostJson-------->error:{0}", ex.Message));
                }
                return "";
            }
    
    
        }
    
        /// <summary>
        /// 默认的FormUrlEncodedContent碰到超长的文本会出现uri too long的异常,这里自己封装一个
        /// 参考来自 stackoverflow
        /// </summary>
        public class MyFormUrlEncodedContent : ByteArrayContent
        {
            public MyFormUrlEncodedContent(IEnumerable<KeyValuePair<string, string>> nameValueCollection)
                : base(MyFormUrlEncodedContent.GetContentByteArray(nameValueCollection))
            {
                base.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
            }
            private static byte[] GetContentByteArray(IEnumerable<KeyValuePair<string, string>> nameValueCollection)
            {
                StringBuilder stringBuilder = new StringBuilder();
                foreach (KeyValuePair<string, string> current in nameValueCollection)
                {
                    if (stringBuilder.Length > 0)
                    {
                        stringBuilder.Append('&');
                    }
    
                    stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Key));
                    stringBuilder.Append('=');
                    stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Value));
                }
                return Encoding.Default.GetBytes(stringBuilder.ToString());
            }
    
            private static string Encode(string data)
            {
                if (string.IsNullOrEmpty(data))
                {
                    return string.Empty;
                }
                return WebUtility.UrlEncode(data);
            }
        }
  • 相关阅读:
    JS中的钩子(hook)机制与实现
    Java 之 注解的定义
    Java 网络编程案例:使用 MulticastSocket 实现多点广播
    Java 基于 UDP 协议的网络编程
    Java 网络编程案例四:多个客户端群聊
    Java 网络编程案例三:多个客户端上传文件
    Java 网络编程案例二:多台客户端与服务器之间的多次通信
    Java 网络编程案例一:一台客户端与服务器单次通信
    Java 之 网络常用API
    Java 之 网络编程基础知识
  • 原文地址:https://www.cnblogs.com/njl041x/p/13051293.html
Copyright © 2011-2022 走看看