Usuário com melhor resposta
HResult=0x80131500 - HttpRequestException: Ocorreu um erro ao enviar a solicitação

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;
var content = syncClient.DownloadString(url);
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();
}
}
}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 13Algué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
Respostas
Todas as Respostas
-
-
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;
}