Example #1
0
        /// <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);
        }