Closed MardSilva closed 4 years ago
Pode colocar um print do erro ?
Opa, segue aí: https://imgur.com/a/YuSEyXp
Parece um erro no cliente que você usou e não na API. Coloca o trecho de código que faz a request aqui.
Segue o trecho:
private string BaixarDadosBrasilGeralAPI()
{
try
{
string strLink = DadosAPI.strAPIDadosGeraisBrasil;
string strRetornoAPI;
Uri novoUrl = new Uri(strLink);
HttpWebRequest requisicaoHTTP = WebRequest.Create(novoUrl) as HttpWebRequest;
requisicaoHTTP.Method = "GET";
requisicaoHTTP.ContentType = "application/json";
using (HttpWebResponse respostaHTTP = requisicaoHTTP.GetResponse() as HttpWebResponse)
{
StreamReader novoLeitorStream = new StreamReader(respostaHTTP.GetResponseStream());
strRetornoAPI = novoLeitorStream.ReadToEnd();
return strRetornoAPI;
}
}
catch
{
MessageBox.Show("Não foi possível obter os dados da API nesse momento.", "Confirmação", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Não é erro no cliente, estou quase certo disso. Nota: o DadosAPI.strLink... é o link que mencionei quando abri a issue. Eu usei 3 clientes diferentes. E o mesmo erro ocorre. E esse inclusive, é o mais recente do 4.5/4.6.
Teste assim
private string BaixarDadosBrasilGeralAPI()
{
try
{
string strLink = DadosAPI.strAPIDadosGeraisBrasil;
string strRetornoAPI;
Uri novoUrl = new Uri(strLink);
HttpWebRequest requisicaoHTTP = WebRequest.Create(novoUrl) as HttpWebRequest;
requisicaoHTTP.Method = "GET";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
requisicaoHTTP.ContentType = "application/json";
using (HttpWebResponse respostaHTTP = requisicaoHTTP.GetResponse() as HttpWebResponse)
{
StreamReader novoLeitorStream = new StreamReader(respostaHTTP.GetResponseStream());
strRetornoAPI = novoLeitorStream.ReadToEnd();
return strRetornoAPI;
}
}
catch
{
MessageBox.Show("Não foi possível obter os dados da API nesse momento.", "Confirmação", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Certo. Tentei sem o delegate. Vou fazer as alterações, com o delegate. Eu já havia usado o ProtocolType.Ss13;. Já te informo!
Caso não funcione, adicione as três linhas de código a seguir antes de criar o objeto HttpWebRequest:
const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
ServicePointManager.SecurityProtocol = Tls12;
OLOCO, agora me explique porque antes adicionaria isso? Resolvido com esse seu ajuste do último ponto. Agora consigo terminar de fazer os requests e deserializar!
Mano essa não é minha área hehehe, eu só usei bem o Google e achei esse post -> https://community.developer.authorize.net/t5/Integration-and-Testing/Could-not-create-SSL-TLS-secure-channel/td-p/63016
Assim que li o erro já sabia que era problema no client.
Agora já entendi o porquê..mas é impressionante. Não cheguei a pensar nisto. De qualquer forma, valeu pelo auxílio. Se quiser te mandarei um link diretamente só pra testar com seus dados da API pra desktop.
Valeu!
Olá, estou adicionando agora os dados para uma aplicação em destkop, que estou desenvolvendo. E, gostei da estrutura do seu JSON. Porém, ao tentar dar o GET usando o seu link da API (vi no seu Insomnia) ele dá o erro: System.Net.WebException: 'A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS.'
O link que estou usando: https://covid19-brazil-api.now.sh/api/report/v1
Entretanto, verifiquei, e, já adiconei ambos os protocolos (SSL/TLS), já tentei adicionar certificado de usuário para poder validar, e até mesmo coloquei minhas credenciais (caso seja algo ligado a credentials) para sua API. Porém, não consigo obter os dados.
Poderia verificar?!