예제 #1
0
        /// <summary>
        /// Envio de HttpWebRequest
        /// </summary>
        /// <param name="dataToSend"></param>
        /// <param name="httpVerbEnum"></param>
        /// <param name="httpContentTypeEnum"></param>
        /// <param name="serviceEndpoint"></param>
        /// <param name="headerData"></param>
        /// <param name="allowInvalidCertificate"></param>
        /// <param name="ignoreResponse"></param>
        /// <returns></returns>
        public HttpResponse SendHttpWebRequest(string dataToSend, HttpVerbEnum httpVerbEnum, string contentType, string accept, string serviceEndpoint, NameValueCollection headerData)
        {
            if (string.IsNullOrWhiteSpace(serviceEndpoint))
            {
                throw new ArgumentException("serviceEndpoint");
            }

            // Cria um objeto webRequest para referenciando a Url do serviço informado
            var serviceUri = new Uri(serviceEndpoint);

            if (WebRequest.Create(serviceUri) is HttpWebRequest httpWebRequest)
            {
                httpWebRequest.Method = httpVerbEnum.ToString().ToUpper();
                if (string.IsNullOrEmpty(contentType) == false)
                {
                    httpWebRequest.ContentType = contentType;
                }

                if (string.IsNullOrEmpty(accept) == false)
                {
                    httpWebRequest.Accept = accept;
                }

                if (headerData != null && headerData.AllKeys.Contains("User-Agent") == true)
                {
                    httpWebRequest.UserAgent = headerData["User-Agent"];
                    headerData.Remove("User-Agent");
                }

                // Verifica se deverão ser enviados dados/chaves de cabeçalho
                if (headerData != null && headerData.Count > 0)
                {
                    // Insere cada chave enviado no cabeçalho da requisição
                    foreach (string key in headerData.Keys)
                    {
                        httpWebRequest.Headers.Add(key, headerData[key].ToString());
                    }
                }

                if (string.IsNullOrWhiteSpace(dataToSend) == false)
                {
                    // Cria um array de bytes dos dados que serão postados
                    byte[] byteData = Encoding.UTF8.GetBytes(dataToSend);

                    // Configura o tamanho dos dados que serão enviados
                    httpWebRequest.ContentLength = byteData.Length;

                    // Escreve os dados na stream do WebRequest
                    using (Stream stream = httpWebRequest.GetRequestStream())
                    {
                        stream.Write(byteData, 0, byteData.Length);
                    }
                }

                string rawResponse = null;

                HttpStatusCode statusCode = HttpStatusCode.OK;

                try
                {
                    // Dispara a requisição e recebe o resultado da mesma
                    using (var response = httpWebRequest.GetResponse() as HttpWebResponse)
                    {
                        // Recupera a stream com a resposta da solicitação
                        if (response != null)
                        {
                            var streamReader = new StreamReader(response.GetResponseStream() ?? throw new InvalidOperationException());
                            rawResponse = streamReader.ReadToEnd();
                        }

                        if (response != null)
                        {
                            statusCode = response.StatusCode;
                        }
                    }
                }
                catch (WebException ex)
                {
                    if (ex.Response == null)
                    {
                        throw;
                    }

                    var response = (HttpWebResponse)ex.Response;
                    var test     = new StreamReader(response.GetResponseStream() ?? throw new InvalidOperationException());
                    rawResponse = test.ReadToEnd();
                    statusCode  = response.StatusCode;
                }

                return(new HttpResponse(rawResponse, statusCode));
            }

            throw new ArgumentException("serviceEndpoint");
        }
        /// <summary>
        /// Envio de HttpWebRequest
        /// </summary>
        /// <param name="dataToSend"></param>
        /// <param name="httpVerbEnum"></param>
        /// <param name="httpContentTypeEnum"></param>
        /// <param name="serviceEndpoint"></param>
        /// <param name="headerData"></param>
        /// <param name="allowInvalidCertificate"></param>
        /// <param name="ignoreResponse"></param>
        /// <returns></returns>
        private HttpResponse SendHttpWebRequest(string dataToSend, HttpVerbEnum httpVerbEnum, HttpContentTypeEnum httpContentTypeEnum, string serviceEndpoint, NameValueCollection headerData, bool allowInvalidCertificate = false)
        {
            if (string.IsNullOrWhiteSpace(serviceEndpoint))
            {
                throw new ArgumentException("serviceEndpoint");
            }

            // Cria um objeto webRequest para referenciando a Url do serviço informado
            Uri serviceUri = new Uri(serviceEndpoint);

            HttpWebRequest httpWebRequest = WebRequest.Create(serviceUri) as HttpWebRequest;

            httpWebRequest.Method      = httpVerbEnum.ToString().ToUpper();
            httpWebRequest.ContentType = httpContentTypeEnum == HttpContentTypeEnum.Json ? "application/json" : "text/xml";
            httpWebRequest.Accept      = httpContentTypeEnum == HttpContentTypeEnum.Json ? "application/json" : "text/xml";

            if (headerData != null && headerData.AllKeys.Contains("User-Agent") == true)
            {
                httpWebRequest.UserAgent = headerData["User-Agent"];
                headerData.Remove("User-Agent");
            }

            // Verifica se certificados inválidos devem ser aceitos.
            if (allowInvalidCertificate == true)
            {
                ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };
            }

            // Verifica se deverão ser enviados dados/chaves de cabeçalho
            if (headerData != null && headerData.Count > 0)
            {
                // Insere cada chave enviado no cabeçalho da requisição
                foreach (string key in headerData.Keys)
                {
                    httpWebRequest.Headers.Add(key, headerData[key].ToString());
                }
            }

            if (string.IsNullOrWhiteSpace(dataToSend) == false)
            {
                // Cria um array de bytes dos dados que serão postados
                byte[] byteData = UTF8Encoding.UTF8.GetBytes(dataToSend);

                // Configura o tamanho dos dados que serão enviados
                httpWebRequest.ContentLength = byteData.Length;

                // Escreve os dados na stream do WebRequest
                using (Stream stream = httpWebRequest.GetRequestStream()) {
                    stream.Write(byteData, 0, byteData.Length);
                }
            }

            string         rawResponse = string.Empty;
            HttpStatusCode statusCode  = HttpStatusCode.OK;

            try {
                // Dispara a requisição e recebe o resultado da mesma
                using (HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse) {
                    // Recupera a stream com a resposta da solicitação
                    StreamReader streamReader = new StreamReader(response.GetResponseStream());
                    rawResponse = streamReader.ReadToEnd();
                    statusCode  = response.StatusCode;
                }
            }
            catch (WebException ex) {
                HttpWebResponse response = (HttpWebResponse)ex.Response;
                StreamReader    test     = new StreamReader(response.GetResponseStream());
                rawResponse = test.ReadToEnd();
                statusCode  = response.StatusCode;
            }

            return(new HttpResponse(rawResponse, statusCode));
        }
예제 #3
0
        /// <summary>
        /// Envio de HttpWebRequest
        /// </summary>
        /// <param name="dataToSend"></param>
        /// <param name="httpVerbEnum"></param>
        /// <param name="httpContentTypeEnum"></param>
        /// <param name="serviceEndpoint"></param>
        /// <param name="headerData"></param>
        /// <param name="allowInvalidCertificate"></param>
        /// <param name="ignoreResponse"></param>
        /// <returns></returns>
        public string SendHttpWebRequest(string dataToSend, HttpVerbEnum httpVerbEnum, HttpContentTypeEnum httpContentTypeEnum, string serviceEndpoint, NameValueCollection headerData, bool allowInvalidCertificate = false, bool ignoreResponse = false)
        {
            if (string.IsNullOrWhiteSpace(serviceEndpoint))
            {
                throw new ArgumentException("serviceEndpoint");
            }

            // Cria um objeto webRequest para referenciando a Url do serviço informado
            Uri serviceUri = new Uri(serviceEndpoint);

            HttpWebRequest httpWebRequest = WebRequest.Create(serviceUri) as HttpWebRequest;

            httpWebRequest.Method        = httpVerbEnum.ToString().ToUpper();
            httpWebRequest.ContentType   = httpContentTypeEnum == HttpContentTypeEnum.Json ? "application/json" : "text/xml";
            httpWebRequest.Accept        = httpContentTypeEnum == HttpContentTypeEnum.Json ? "application/json" : "text/xml";
            httpWebRequest.ContentLength = 0;

            // Verifica se certificados inválidos devem ser aceitos.
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => allowInvalidCertificate);

            // Verifica se deverão ser enviados dados/chaves de cabeçalho
            if (headerData.Count > 0)
            {
                // Insere cada chave enviado no cabeçalho da requisição
                foreach (string key in headerData.Keys)
                {
                    httpWebRequest.Headers.Add(key, headerData[key].ToString());
                }
            }

            if (string.IsNullOrWhiteSpace(dataToSend) == false)
            {
                // Cria um array de bytes dos dados que serão postados
                byte[] byteData = UTF8Encoding.UTF8.GetBytes(dataToSend);

                // Configura o tamanho dos dados que serão enviados
                httpWebRequest.ContentLength = byteData.Length;

                // Escreve os dados na stream do WebRequest
                using (Stream stream = httpWebRequest.GetRequestStream())
                {
                    stream.Write(byteData, 0, byteData.Length);
                }
            }

            string returnString = string.Empty;

            try
            {
                // Dispara a requisição e recebe o resultado da mesma
                using (HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse)
                {
                    if (ignoreResponse == false)
                    {
                        // Recupera a stream com a resposta da solicitação
                        StreamReader streamReader = new StreamReader(response.GetResponseStream());
                        returnString = streamReader.ReadToEnd();
                    }
                }
            }
            catch (WebException ex)
            {
                throw ex;
            }

            return(returnString);
        }