protected virtual HttpWebRequest CreateHttpWebRequest(IHttpClientRequest clientRequest) { IHttpClientRequest requestCopy = new HttpClientRequest(clientRequest); requestCopy.Authenticaton = requestCopy.Authenticaton ?? _auth; Uri requestUri = requestCopy.BuildRequestUri(this); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); request.Method = requestCopy.Method; request.Timeout = Timeout; request.ContentType = requestCopy.ContentType; request.UserAgent = UserAgent; request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; requestCopy.Authenticaton?.ApplyManualAuthentication(requestCopy); request.Credentials = requestCopy.Authenticaton; foreach (var x in Headers) { request.Headers[x.Key] = x.Value?.ToString(); } foreach (var x in requestCopy.Headers) { request.Headers[x.Key] = x.Value?.ToString(); } if (requestCopy.Method != "POST") { return(request); } byte[] serialized = Serialize(requestCopy.Body, requestCopy.ContentType); using (Stream requestStream = request.GetRequestStream()) requestStream.Write(serialized, 0, serialized.Length); if (!Logger.IsTracingEnabled) { return(request); } Logger.Trace($"Performing Http Request:"); Logger.Trace($"[{request.Method}] {request.RequestUri}"); Logger.Trace($"[BODY] {requestCopy.Body}"); foreach (var x in request.Headers.AllKeys) { Logger.Trace($"[HEADER] {x}={request.Headers[x]}"); } return(request); }