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); } }