none
HResult=0x80131500 - HttpRequestException: Ocorreu um erro ao enviar a solicitação RRS feed

  • Pergunta

  • Olá, estou começando a desenvolver aplicações relacionadas com o consumo de APIs. Fiz uma aplicação console bem simples só para iniciar os testes, com base no que já vi na web, e estou tendo problemas.

    O objetivo final seria utilizar os dados do CartolaFC para trazer as informações e apresentar de uma forma que não encontro em websites, em aplicativos de terceiros e nem no aplicativo oficial. Já criei o modelo de banco de dados, já tenho o front-end modelado, as interfaces e consultas encaminhadas, a única coisa que me falta é ler a API (resposta em JSON) e inserir os dados no banco de dados.

    Abaixo segue o código simples que implementei para a leitura de forma síncrona:

    Arquivo Program.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleAppHttpSync
    {
        class Program
        {
            static void Main(string[] args)
            {
                WebAPIClient.GetAPIData();
            }
        }
    }

    Arquivo WebAPIClient.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;

    namespace ConsoleAppHttpSync
    {
        class WebAPIClient
        {
            public static void GetAPIData()
            {
                //var url = "https://api.cartolafc.globo.com/pos-rodada/destaques"; //Não funciona
                //var url = "https://api.cartolafc.globo.com/atlestas/mercado"; //Não funciona
                var url = "http://jsonplaceholder.typicode.com/posts"; //Funciona normal

                var syncClient = new WebClient();

                var content = syncClient.DownloadString(url);
            }
        }
    }

    Abaixo segue o código do aplicativo console com leitura em modo assíncrono:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Runtime.Serialization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Serialization;

    namespace ConsoleAppHttp
    {
        class Program
        {
            static void Main(string[] args)
            {
                RunAsync().Wait();
            }

            static async Task<Boolean> RunAsync()
            {
                HttpClient clientAPI = new HttpClient();

                //string sResponse = await clientAPI.GetStringAsync("https://api.cartolafc.globo.com/atletas/mercado"); //Não Funciona
                //string sResponse = await clientAPI.GetStringAsync("https://api.cartolafc.globo.com/pos-rodada/destaques"); //Não Funciona
                
                string sResponse = await clientAPI.GetStringAsync("http://jsonplaceholder.typicode.com/posts"); //Funciona
                Console.Write(sResponse);
                Console.Read();

                return true;
            }
        }
    }

    Para os dois casos, a solicitação para uma API pública qualquer funciona (ex.: jsonplaceholder), tentei várias sem problemas, mas quando vou testar com a API do CartolaFC o programa gera erro.

    Segue erro da aplicação assíncrona:

    System.AggregateException ocorrido
      HResult=0x80131500
      Message=Um ou mais erros.
      Source=mscorlib
      StackTrace:
       em System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
       em System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
       em System.Threading.Tasks.Task.Wait()
       em ConsoleAppHttp.Program.Main(String[] args) em e:\ricardo\documents\visual studio 2017\Projects\ConsoleAppHttp\ConsoleAppHttp\Program.cs:linha 19

    Exceção interna 1:
    HttpRequestException: Ocorreu um erro ao enviar a solicitação.

    Exceção interna 2:
    WebException: A conexão subjacente estava fechada: A conexão foi fechada de modo inesperado.

    Segue erro gerado na aplicação do modo síncrono:

    System.Net.WebException ocorrido
      HResult=0x80131509
      Message=A conexão subjacente estava fechada: A conexão foi fechada de modo inesperado.
      Source=System
      StackTrace:
       em System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
       em System.Net.WebClient.DownloadString(Uri address)
       em System.Net.WebClient.DownloadString(String address)
       em ConsoleAppHttpSync.WebAPIClient.GetAPIData() em e:\ricardo\documents\visual studio 2017\Projects\ConsoleAppHttpSync\ConsoleAppHttpSync\WebAPIClient.cs:linha 18
       em ConsoleAppHttpSync.Program.Main(String[] args) em e:\ricardo\documents\visual studio 2017\Projects\ConsoleAppHttpSync\ConsoleAppHttpSync\Program.cs:linha 13

    Alguém pode me auxiliar? Alguém saberia me dizer a causa e solução?

    Obs.: Estou usando Visual Studio Community 2017. Sistema operacional Windows 10 atualizado.

    Obrigado.


    • Editado RFeichas terça-feira, 20 de junho de 2017 23:11 Inclusão de novos dados de versão do VS e SO
    terça-feira, 20 de junho de 2017 22:56

Respostas

  • Já foi resolvido. Era só incluir um User-Agent.
    Ex.: 
    clientAPI.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Mozilla", "5.0"));
    • Marcado como Resposta RFeichas sábado, 24 de junho de 2017 21:09
    sábado, 24 de junho de 2017 21:04

Todas as Respostas

  • Já foi resolvido. Era só incluir um User-Agent.
    Ex.: 
    clientAPI.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Mozilla", "5.0"));
    • Marcado como Resposta RFeichas sábado, 24 de junho de 2017 21:09
    sábado, 24 de junho de 2017 21:04
  • Resolvi o problema da sequinte maneira:

    public string JsonReturn(string sURL)
            {
                string _retorno = "";
                try
                {
                    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11; // .Tls;
                    System.Net.WebClient client = new System.Net.WebClient();                
                    var JReturn = client.DownloadString(sURL);
                    _retorno = JReturn.ToString();
                }
                catch (Exception ex)
                {
                    HereClick.Util.Excecao.SQLClient.TratarExcecao TrataExcessao = new HereClick.Util.Excecao.SQLClient.TratarExcecao(ex);
                    throw ex;
                }
                return _retorno;
            }

    quinta-feira, 8 de fevereiro de 2018 15:17