async Task <HttpURLConnection> SetupRequestInternal(HttpRequestMessage request, URLConnection conn) { if (conn == null) { throw new ArgumentNullException(nameof(conn)); } var httpConnection = conn.JavaCast <HttpURLConnection> (); if (httpConnection == null) { throw new InvalidOperationException($"Unsupported URL scheme {conn.URL.Protocol}"); } httpConnection.RequestMethod = request.Method.ToString(); // SSL context must be set up as soon as possible, before adding any content or // headers. Otherwise Java won't use the socket factory SetupSSL(httpConnection as HttpsURLConnection); if (request.Content != null) { AddHeaders(httpConnection, request.Content.Headers); } AddHeaders(httpConnection, request.Headers); List <string> accept_encoding = null; decompress_here = false; if ((AutomaticDecompression & DecompressionMethods.GZip) != 0) { AppendEncoding(GZIP_ENCODING, ref accept_encoding); decompress_here = true; } if ((AutomaticDecompression & DecompressionMethods.Deflate) != 0) { AppendEncoding(DEFLATE_ENCODING, ref accept_encoding); decompress_here = true; } if (AutomaticDecompression == DecompressionMethods.None) { accept_encoding?.Clear(); AppendEncoding(IDENTITY_ENCODING, ref accept_encoding); // Turns off compression for the Java client } if (accept_encoding?.Count > 0) { httpConnection.SetRequestProperty("Accept-Encoding", String.Join(",", accept_encoding)); } if (UseCookies && CookieContainer != null) { string cookieHeaderValue = CookieContainer.GetCookieHeader(request.RequestUri); if (!String.IsNullOrEmpty(cookieHeaderValue)) { httpConnection.SetRequestProperty("Cookie", cookieHeaderValue); } } HandlePreAuthentication(httpConnection); await SetupRequest(request, httpConnection).ConfigureAwait(continueOnCapturedContext: false);; SetupRequestBody(httpConnection, request); return(httpConnection); }