internal virtual HttpRequestMessage GetRequest(Uri uri, bool stripAuthorization) { Uri requestUri = PrepareUri(uri); HttpMethod httpMethod = null; switch (ParameterSetName) { case "StandardMethodNoProxy": goto case "StandardMethod"; case "StandardMethod": // set the method if the parameter was provided httpMethod = GetHttpMethod(Method); break; case "CustomMethodNoProxy": goto case "CustomMethod"; case "CustomMethod": if (!string.IsNullOrEmpty(CustomMethod)) { // set the method if the parameter was provided httpMethod = new HttpMethod(CustomMethod.ToString().ToUpperInvariant()); } break; } // create the base WebRequest object var request = new HttpRequestMessage(httpMethod, requestUri); // pull in session data if (WebSession.Headers.Count > 0) { WebSession.ContentHeaders.Clear(); foreach (var entry in WebSession.Headers) { if (HttpKnownHeaderNames.ContentHeaders.Contains(entry.Key)) { WebSession.ContentHeaders.Add(entry.Key, entry.Value); } else { if (stripAuthorization && String.Equals(entry.Key, HttpKnownHeaderNames.Authorization.ToString(), StringComparison.OrdinalIgnoreCase) ) { continue; } if (SkipHeaderValidation) { request.Headers.TryAddWithoutValidation(entry.Key, entry.Value); } else { request.Headers.Add(entry.Key, entry.Value); } } } } // Set 'Transfer-Encoding: chunked' if 'Transfer-Encoding' is specified if (WebSession.Headers.ContainsKey(HttpKnownHeaderNames.TransferEncoding)) { request.Headers.TransferEncodingChunked = true; } // Set 'User-Agent' if WebSession.Headers doesn't already contain it string userAgent = null; if (WebSession.Headers.TryGetValue(HttpKnownHeaderNames.UserAgent, out userAgent)) { WebSession.UserAgent = userAgent; } else { if (SkipHeaderValidation) { request.Headers.TryAddWithoutValidation(HttpKnownHeaderNames.UserAgent, WebSession.UserAgent); } else { request.Headers.Add(HttpKnownHeaderNames.UserAgent, WebSession.UserAgent); } } // Set 'Keep-Alive' to false. This means set the Connection to 'Close'. if (DisableKeepAlive) { request.Headers.Add(HttpKnownHeaderNames.Connection, "Close"); } // Set 'Transfer-Encoding' if (TransferEncoding != null) { request.Headers.TransferEncodingChunked = true; var headerValue = new TransferCodingHeaderValue(TransferEncoding); if (!request.Headers.TransferEncoding.Contains(headerValue)) { request.Headers.TransferEncoding.Add(headerValue); } } // Some web sites (e.g. Twitter) will return exception on POST when Expect100 is sent // Default behavior is continue to send body content anyway after a short period // Here it send the two part as a whole. request.Headers.ExpectContinue = false; return(request); }