/// <summary> /// send httpRequest and get response /// </summary> /// <param name="httpRequest">the request data to send</param> /// <param name="clientConfiguration">http client configuration</param> /// <returns>the response of the request</returns> public static HttpWebResponse GetHttpResponse(IHttpRequest httpRequest, ClientConfiguration clientConfiguration) { string url = httpRequest.GetUrl(); if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url is null"); } HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); } HttpMethod httpMethod = httpRequest.GetHttpMethod(); request.Method = httpMethod.ToString(); request.ContentType = httpRequest.GetContentType(); request.UserAgent = httpRequest.GetUserAgent(); //set http proxy SetHttpProxy(request, clientConfiguration); // set timeout if (httpRequest.GetTimeout().HasValue) { request.Timeout = httpRequest.GetTimeout().Value; request.ReadWriteTimeout = httpRequest.GetTimeout().Value; } else if (clientConfiguration.Timeout.HasValue) { request.Timeout = clientConfiguration.Timeout.Value; request.ReadWriteTimeout = clientConfiguration.Timeout.Value; } #region add header if (!(httpRequest.GetHeaders() == null || httpRequest.GetHeaders().Count == 0)) { foreach (string key in httpRequest.GetHeaders().Keys) { request.Headers.Add(key, httpRequest.GetHeaders()[key]); } } #endregion add header #region post json if ((httpMethod == HttpMethod.POST || httpMethod == HttpMethod.PUT) && !string.IsNullOrEmpty(httpRequest.GetBodyParams())) { using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(httpRequest.GetBodyParams()); streamWriter.Flush(); streamWriter.Close(); } } #endregion post json ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; HttpWebResponse httpWebResponse = null; try { httpWebResponse = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { if (ex.Response != null) { httpWebResponse = (HttpWebResponse)ex.Response; } else { throw ex; } } return(httpWebResponse); }