Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Dúvida] Desafio: Hora da prática 01

Implementei o seguinte código:

using (HttpClient client = new HttpClient())
{
    string resposta = await client.GetStringAsync("https://www.cheapshark.com/api/1.0/deals");
    Console.WriteLine(resposta);
}

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

Todavia, na hora da execução, é avisado que um erro ocorre; o status code de bad request 400, mesmo a URL estando correta, a requisição é invalidada. Algum ponteiro sobre o que estou a fazer de errado ou sobre como prosseguir?

2 respostas

A url está incorreta. Vc pode validar a resposta esparada colando a url no seu navegador. A linha de obtenção dos dados, pela api, é:

var musicasResponse = await httpClient.GetStringAsync("https://guilhermeonrails.github.io/api-csharp-songs/songs.json");

Olá Christopher.
Tudo bem?
O seu código parece correto à primeira vista.
O detalhe é que a API da CheapShark passou a exigir que as requisições enviem um cabeçalho User-Agent.
A documentação oficial menciona explicitamente esse requisito.
Experimente algo assim:

using System.Net.Http;

using HttpClient client = new HttpClient();

client.DefaultRequestHeaders.Add(
    "User-Agent",
    "MeuAppCSharp/1.0");

string resposta = await client.GetStringAsync(
    "https://www.cheapshark.com/api/1.0/deals");

Console.WriteLine(resposta);

Outra possibilidade é capturar mais detalhes da exceção para verificar exatamente o que o servidor está retornando:

try
{
    using HttpClient client = new HttpClient();

    client.DefaultRequestHeaders.Add(
        "User-Agent",
        "MeuAppCSharp/1.0");

    string resposta = await client.GetStringAsync(
        "https://www.cheapshark.com/api/1.0/deals");

    Console.WriteLine(resposta);
}
catch (HttpRequestException ex)
{
    Console.WriteLine(ex.Message);
}

Também vale conferir:

  • Se você copiou a URL sem espaços extras.
  • Se está usando uma versão recente do .NET (.NET 6, 7, 8 ou superior).
  • Se a sua rede/proxy corporativo não está alterando a requisição.

Já vi outros alunos enfrentarem esse problema porque o exercício foi criado quando a API aceitava requisições sem restrições, mas posteriormente a CheapShark passou a aplicar validações adicionais (headers, limites de acesso, proteção anti-bot etc.).
Para isolar o problema, experimente também acessar uma API pública simples:

using HttpClient client = new();

string resposta = await client.GetStringAsync(
    "https://jsonplaceholder.typicode.com/posts/1");

Console.WriteLine(resposta);

Se esse código funcionar e apenas a CheapShark falhar, então o problema não está no seu uso do HttpClient, mas em alguma exigência específica da API da CheapShark.
O ideal mesmo é consultar a documentação no site oficial da api : (https://apidocs.cheapshark.com/) .
Avise qualquer duvida.
Bons estudos.