private HttpWebRequest CreateRequest(string resource)
        {
            var uriBuilder = new UriBuilder(_hostUri);

            if (Port != 0)
            {
                uriBuilder.Port = Port;
            }

            var resourceUri = new Uri(uriBuilder.Uri, resource);

            // http://qaru.site/questions/45913/the-request-was-aborted-could-not-create-ssltls-secure-channel
            // Убедитесь, что настройки ServicePointManager заданы до создания HttpWebRequest,
            // иначе он не будет работать
            if (uriBuilder.Scheme == HTTPS_SCHEME)
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
            }

            var request = (HttpWebRequest)HttpWebRequest.Create(resourceUri);

            if (User != "" || Password != "")
            {
                request.Credentials = new NetworkCredential(User, Password);
                //request.PreAuthenticate = true;
                // Авторизация на сервере 1С:Предприятие, например, не работает без явного указания заголовка.
                // http://blog.kowalczyk.info/article/at3/Forcing-basic-http-authentication-for-HttpWebReq.html
                string authInfo = User + ":" + Password;
                // Для 1С работает только UTF-8, хотя стандарт требует ISO-8859-1
                var basicAuthEncoding = Encoding.GetEncoding("UTF-8");
                authInfo = Convert.ToBase64String(basicAuthEncoding.GetBytes(authInfo));
                request.Headers["Authorization"] = "Basic " + authInfo;
            }
            else if (UseOSAuthentication)
            {
                request.Credentials = CredentialCache.DefaultNetworkCredentials;
            }

            if (_proxy != null)
            {
                request.Proxy = _proxy.GetProxy(uriBuilder.Scheme);
            }

            if (Timeout == 0)
            {
                request.Timeout = System.Threading.Timeout.Infinite;
            }
            else
            {
                request.Timeout = Timeout * 1000;
            }

            if (uriBuilder.Scheme == HTTPS_SCHEME)
            {
                request.ServerCertificateValidationCallback = delegate { return(true); };
            }

            return(request);
        }
Пример #2
0
        private HttpWebRequest CreateRequest(string resource)
        {
            var uriBuilder = new UriBuilder(_hostUri);

            if (Port != 0)
            {
                uriBuilder.Port = Port;
            }

            var resourceUri = new Uri(uriBuilder.Uri, resource);

            var request = (HttpWebRequest)HttpWebRequest.Create(resourceUri);

            if (User != "" || Password != "")
            {
                request.Credentials = new NetworkCredential(User, Password);
                //request.PreAuthenticate = true;
                // Авторизация на сервере 1С:Предприятие, например, не работает без явного указания заголовка.
                // http://blog.kowalczyk.info/article/at3/Forcing-basic-http-authentication-for-HttpWebReq.html
                string authInfo = User + ":" + Password;
                // Для 1С работает только UTF-8, хотя стандарт требует ISO-8859-1
                var basicAuthEncoding = Encoding.GetEncoding("UTF-8");
                authInfo = Convert.ToBase64String(basicAuthEncoding.GetBytes(authInfo));
                request.Headers["Authorization"] = "Basic " + authInfo;
            }
            else if (UseOSAuthentication)
            {
                request.Credentials = CredentialCache.DefaultNetworkCredentials;
            }

            if (_proxy != null)
            {
                request.Proxy = _proxy.GetProxy(uriBuilder.Scheme);
            }

            if (Timeout == 0)
            {
                request.Timeout = System.Threading.Timeout.Infinite;
            }
            else
            {
                request.Timeout = Timeout * 1000;
            }

            if (uriBuilder.Scheme == HTTPS_SCHEME)
            {
                request.ServerCertificateValidationCallback = delegate { return(true); };
            }

            return(request);
        }