Exemplo n.º 1
0
        static HttpClientFactory()
        {
            Get = (() =>
            {
                var httpClientHandler = new HttpClientHandler();
                if (httpClientHandler.SupportsAutomaticDecompression)
                {
                    httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                }
                if (httpClientHandler.SupportsUseProxy())
                {
                    httpClientHandler.UseProxy = true;
                }
                if (httpClientHandler.SupportsAllowAutoRedirect())
                {
                    httpClientHandler.AllowAutoRedirect = true;
                }
                if (httpClientHandler.SupportsPreAuthenticate())
                {
                    httpClientHandler.PreAuthenticate = true;
                }

                var httpClient = new HttpClient(httpClientHandler);
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/jsonp"));
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));

                return(httpClient);
            });
        }
        public ProxyModule()
        {
            var httpClientHandler = new HttpClientHandler();

            if (httpClientHandler.SupportsAutomaticDecompression)
            {
                httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            }
            if (httpClientHandler.SupportsUseProxy())
            {
                httpClientHandler.UseProxy = true;
            }
            if (httpClientHandler.SupportsAllowAutoRedirect())
            {
                httpClientHandler.AllowAutoRedirect = true;
            }
            if (httpClientHandler.SupportsPreAuthenticate())
            {
                httpClientHandler.PreAuthenticate = true;
            }

            var httpClient = new HttpClient(httpClientHandler);

            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/jsonp"));
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/*"));

            Get["/proxy", true] = async(parameters, ctx) =>
            {
                var parsedUrl      = ParseQueryString(Request.Query);
                var requestForType = parsedUrl.Item1;
                var url            = parsedUrl.Item2;

                var response = await httpClient.GetAsync(url);

                response.EnsureSuccessStatusCode();

                if (string.Equals(JsonFormat, requestForType, StringComparison.OrdinalIgnoreCase))
                {
                    return(await response.Content.ReadAsStringAsync().ConfigureAwait(false));
                }

                Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

                return(Response.FromStream(responseStream, DefaultImageResponseContentType));
            };

            Post["/proxy", true] = async(parameters, ctx) =>
            {
                var parsedUrl      = ParseQueryString(Request.Query);
                var requestForType = parsedUrl.Item1;
                var url            = parsedUrl.Item2.Split('?').FirstOrDefault();

                var         parametersToSend = parsedUrl.Item3;
                HttpContent content          = null;
                try
                {
                    content = new FormUrlEncodedContent(parametersToSend);
                }
                catch (FormatException fex)
                {
                    var tempContent = new MultipartFormDataContent();
                    foreach (var keyValuePair in parametersToSend)
                    {
                        tempContent.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
                    }
                    content = tempContent;
                }

                var response = await httpClient.PostAsync(url, content);

                response.EnsureSuccessStatusCode();

                if (string.Equals(JsonFormat, requestForType, StringComparison.OrdinalIgnoreCase))
                {
                    return(await response.Content.ReadAsStringAsync().ConfigureAwait(false));
                }

                Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

                return(Response.FromStream(responseStream, DefaultImageResponseContentType));
            };
        }