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