public HttpProductInfoHeaderValue Create()
        {
            try
            {
                // What should we do?  App names often have non-ASCII characters.
                // These characters are turned into question marks by the
                // time the header hits the wire.  We do RFC 2047 encoding
                // so that the server's log winds up with something decipherable.
                // This can easily be changed by providing an alternate factory
                // or an alternate IUserAgent implementation.
                // (Note that only strings that need encoding are modified by
                // ".Rfc2047Encode()".)
                var productName = _userAgent.Name.Trim().Replace(' ', '-').Rfc2047Encode();

                var userAgent = new HttpProductInfoHeaderValue(productName, _userAgent.Version);

                return userAgent;
            }
            catch (FormatException ex)
            {
                Debug.WriteLine("HttpDefaults.DefaultUserAgentFactory({0}, {1}) unable to construct HttpProductInfoHeaderValue: {2}",
                    _userAgent.Name, _userAgent.Version, ex.Message);

                return null;
            }
        }
        public async Task <HttpResponseMessage> SendAsync(CancellationToken token = default(CancellationToken), Progress <HttpProgress> progressCallback = null)
        {
            using (var request = new HttpRequestMessage(_method, _requestUrl))
                using (_contentStream)
                {
                    request.Headers.Connection.Add(new HttpConnectionOptionHeaderValue("Keep-Alive"));
                    request.Headers.UserAgent.Add(HttpProductInfoHeaderValue.Parse("Mozilla/5.0"));
                    if (_customHeaders != null)
                    {
                        foreach (var header in _customHeaders)
                        {
                            request.Headers.Add(header);
                        }
                    }

                    if (_method.Method == "PROPFIND")
                    {
                        request.Content = new HttpStringContent(PropfindContent, UnicodeEncoding.Utf8);
                    }
                    else if (_contentStream != null)
                    {
                        request.Content = new HttpStreamContent(_contentStream.AsInputStream());
                    }
                    HttpResponseMessage response = await _httpClient.SendRequestAsync(request, HttpCompletionOption.ResponseHeadersRead).AsTask(token, progressCallback);

                    return(response);
                }
        }
Example #3
0
        public MyHttpClient(Client owner, HttpClient inner)
        {
            _Inner    = inner;
            _Owner    = owner;
            _Nocookie = new HttpClient(new HttpBaseProtocolFilter
            {
                CookieUsageBehavior = HttpCookieUsageBehavior.NoCookies,
            });

            var ua = new HttpProductInfoHeaderValue(Package.Current.Id.Name, Package.Current.Id.Version.ToVersion().ToString());

            _Inner.DefaultRequestHeaders.UserAgent.Add(ua);
            _Nocookie.DefaultRequestHeaders.UserAgent.Add(ua);
        }
        public WinRtHttpClientFactory(IWinRtHttpClientFactoryParameters parameters, IWebReaderManagerParameters webReaderManagerParameters, IHttpProductInfoHeaderValueFactory httpProductInfoFactory, Func<HttpBaseProtocolFilter> httpClientHandlerFactory)
        {
            if (null == parameters)
                throw new ArgumentNullException(nameof(parameters));
            if (null == webReaderManagerParameters)
                throw new ArgumentNullException(nameof(webReaderManagerParameters));
            if (null == httpProductInfoFactory)
                throw new ArgumentNullException(nameof(httpProductInfoFactory));
            if (null == httpClientHandlerFactory)
                throw new ArgumentNullException(nameof(httpClientHandlerFactory));

            _referrer = parameters.Referrer;
            _userAgent = httpProductInfoFactory.Create();
            _credentials = parameters.Credentials;

            _webReaderManagerParameters = webReaderManagerParameters;
            _httpClientHandlerFactory = httpClientHandlerFactory;
        }
Example #5
0
        private IResponse Invoke(UrlBuilder url, HttpMethod method, System.Net.Http.HttpContent content, IBindingSession session,
                                 long?offset, long?length, IDictionary <string, string> headers)
        {
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug("HTTP: " + method.ToString() + " " + url.ToString());
            }

            IWindowsAuthenticationProvider authProvider = session.GetAuthenticationProvider() as IWindowsAuthenticationProvider;

            HttpClient httpClient = session.GetValue(InvokerHttpClient) as HttpClient;

            if (httpClient == null)
            {
                lock (invokerLock)
                {
                    httpClient = session.GetValue(InvokerHttpClient) as HttpClient;
                    if (httpClient == null)
                    {
                        HttpBaseProtocolFilter httpClientFilter = new HttpBaseProtocolFilter();

                        // redirects
                        httpClientFilter.AllowAutoRedirect = false;

                        // compression
                        string compressionFlag = session.GetValue(SessionParameter.Compression) as string;
                        if (compressionFlag != null && compressionFlag.ToLowerInvariant().Equals("true"))
                        {
                            httpClientFilter.AutomaticDecompression = true;
                        }

                        // authentication
                        httpClientFilter.AllowUI = false;

                        // authentication provider
                        if (authProvider != null)
                        {
                            authProvider.PrepareHttpClientFilter(httpClientFilter);
                        }

                        // create HttpClient
                        httpClient = new HttpClient(httpClientFilter);

                        session.PutValue(InvokerHttpClient, httpClient);
                    }
                }
            }

            HttpRequestMessage request = new HttpRequestMessage(method, new Uri(url.ToString()));

            // set additional headers

            string userAgent = session.GetValue(SessionParameter.UserAgent) as string;

            request.Headers.UserAgent.Add(HttpProductInfoHeaderValue.Parse(userAgent ?? ClientVersion.UserAgent));

            if (headers != null)
            {
                foreach (KeyValuePair <string, string> header in headers)
                {
                    request.Headers.TryAppendWithoutValidation(header.Key, header.Value);
                }
            }

            // range
            if (offset != null && length != null)
            {
                long longOffset = offset.Value < 0 ? 0 : offset.Value;
                if (length.Value > 0)
                {
                    request.Headers.Add(new KeyValuePair <string, string>("Range", "bytes=" + longOffset + "-" + (longOffset + length.Value - 1)));
                }
                else
                {
                    request.Headers.Add(new KeyValuePair <string, string>("Range", "bytes=" + longOffset + "-"));
                }
            }
            else if (offset != null && offset.Value > 0)
            {
                request.Headers.Add(new KeyValuePair <string, string>("Range", "bytes=" + offset.Value + "-"));
            }

            // content
            if (content != null)
            {
                request.Content = new ConvertedHttpContent(content);

                if (request.Content.Headers.ContentLength == null)
                {
                    request.Headers.TransferEncoding.TryParseAdd("chunked");
                }
            }

            // authentication provider
            if (authProvider != null)
            {
                authProvider.PrepareHttpRequestMessage(request);
            }

            // timeouts
            int timeout = session.GetValue(SessionParameter.ConnectTimeout, -2);

            WindowsResponse response;

            try
            {
                Task <HttpResponseMessage> task = Send(httpClient, request, timeout);
                if (task.IsFaulted)
                {
                    throw task.Exception;
                }
                else
                {
                    HttpResponseMessage httpResponseMessage = task.Result;

                    if (authProvider != null)
                    {
                        authProvider.HandleResponse(httpResponseMessage);
                    }
                    response = new WindowsResponse(httpResponseMessage);
                }
            }
            catch (Exception e)
            {
                throw new CmisConnectionException("Cannot access " + url + ": " + e.Message, e);
            }

            return(response);
        }
        public async Task RequestUrl(WebMessage web)
        {
            var request = new HttpClient();
            HttpResponseMessage response = null;

            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("text/html"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/xhtml+xml"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/xml"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("application/json"));
            request.DefaultRequestHeaders.Accept.Add(HttpMediaTypeWithQualityHeaderValue.Parse("*/*"));

            request.DefaultRequestHeaders.UserAgent.Add(HttpProductInfoHeaderValue.Parse("Mozilla/5.0"));

            try
            {
                if (web.Action != null)
                {
                    switch (web.Action.ToUpperInvariant())
                    {
                    case "POST":
                    {
                        var content = new HttpStringContent(web.Data, UnicodeEncoding.Utf8, "application/json");

                        request.DefaultRequestHeaders.Accept.Add(
                            new HttpMediaTypeWithQualityHeaderValue("application/json"));

                        response = await request.PostAsync(new Uri(web.Url), content);

                        break;
                    }

                    case "GET":
                    {
                        request.DefaultRequestHeaders.Accept.Add(
                            new HttpMediaTypeWithQualityHeaderValue("application/json"));
                        response = await request.GetAsync(new Uri(web.Url));

                        break;
                    }
                    }

                    response?.EnsureSuccessStatusCode();
                }

                if (response != null)
                {
                    var result = new ResultMessage(web)
                    {
                        ResultId = (int)response.StatusCode, Type = 'W'
                    };

                    if (!string.IsNullOrWhiteSpace(web.Parse) || web.Len > 0)
                    {
                        var temp = await response.Content.ReadAsStringAsync();

                        if (!string.IsNullOrWhiteSpace(web.Parse))
                        {
                            var parser = new Parser {
                                Content = temp, Instructions = web.Parse
                            };
                            if (parser.Parse())
                            {
                                if (parser.IsDictionary)
                                {
                                    mainPage.mainDictionary[parser.Tablename] = parser.Dictionary;
                                    temp            = parser.Tablename;
                                    result.ResultId = parser.Dictionary.Count();
                                }
                                else
                                {
                                    temp = parser.Result;
                                }
                            }
                        }

                        result.Result = string.IsNullOrWhiteSpace(temp)
                            ? string.Empty
                            : temp.Substring(0, Math.Min(temp.Length, web.Len == 0 ? 200 : web.Len));
                    }

                    await mainPage.SendResult(result);
                }
            }
            catch (Exception e)
            {
                await mainPage.SendResult(new ResultMessage(web) { ResultId = e.HResult, Result = e.Message });
            }
        }