Como definir cabeçalhos em uma requisição HTTP GET em Go: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como definir cabeçalhos em uma requisição HTTP GET em Go? Explicação completa com código

\n\n

Você já tentou enviar uma requisição HTTP GET para um servidor e ele retornou um erro de autenticação? Ou talvez a API ignorou sua requisição, mesmo você sabendo que ela deveria funcionar? Em 90% dos casos, o problema está nos cabeçalhos HTTP. É como um ingresso para uma festa: sem o documento certo, você simplesmente não entra.

\n\n

Neste artigo, vamos explorar como gerenciar profissionalmente cabeçalhos em requisições HTTP GET em Go (Golang). Você aprenderá não apenas a sintaxe básica, mas também as armadilhas típicas que até desenvolvedores experientes enfrentam. Vamos lá!

\n\n

Por que os cabeçalhos são importantes?

\n\n

Imagine que uma requisição HTTP é um envelope com uma carta. O envelope em si (corpo da requisição) pode estar vazio, mas as informações nele (cabeçalhos) decidem tudo:

\n
    \n
  • Content-Type — formato dos dados (JSON, XML, Form)
  • \n
  • Authorization — chave de acesso à API (Bearer token, Basic Auth)
  • \n
  • User-Agent — identificação do cliente (para não ser bloqueado como bot)
  • \n
  • Accept — qual formato de resposta você espera
  • \n
\n

Sem os cabeçalhos corretos, o servidor simplesmente não entenderá o que você quer.

\n\n

Método 1: O velho http.Get (e por que ele não é adequado)

\n\n

Muitos iniciantes em Go começam com http.Get(). É conveniente para testes, mas este método tem uma grande desvantagem — não é possível definir cabeçalhos.

\n\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil"\n    "net/http"\n)\n\nfunc main() {\n    // Assim não é possível adicionar cabeçalhos!\n    resp, err := http.Get("https://api.example.com/data")\n    if err != nil {\n        panic(err)\n    }\n    defer resp.Body.Close()\n\n    body, _ := ioutil.ReadAll(resp.Body)\n    fmt.Println(string(body))\n}\n
\n\n

Este código simplesmente envia uma requisição "nua". Se a API exigir um token de autenticação — você receberá 401 Unauthorized. Para projetos reais, essa abordagem não é adequada.

\n\n

Método 2: Criando sua própria Request (o caminho correto)

\n\n

Em Go, para ajustar requisições, usa-se o construtor http.NewRequest(). Ele retorna um objeto *http.Request, com o qual você pode fazer tudo, incluindo definir cabeçalhos.

\n\n

Aqui está a estrutura básica:

\n\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil"\n    "net/http"\n)\n\nfunc main() {\n    // 1. Criar a URL\n    url := "https://api.github.com/users/golang"\n\n    // 2. Criar uma nova requisição GET\n    req, err := http.NewRequest("GET", url, nil)\n    if err != nil {\n        panic(err)\n    }\n\n    // 3. Definir os cabeçalhos\n    req.Header.Set("User-Agent", "MyGoApp/1.0")\n    req.Header.Set("Accept", "application/json")\n\n    // 4. Enviar a requisição através do cliente HTTP\n    client := &http.Client{}\n    resp, err := client.Do(req)\n    if err != nil {\n        panic(err)\n    }\n    defer resp.Body.Close()\n\n    body, _ := ioutil.ReadAll(resp.Body)\n    fmt.Println(string(body))\n}\n
\n\n

Observe que usamos req.Header.Set(), e não req.Header.Add(). A diferença é importante:

\n
    \n
  • Set — substitui o valor existente (se o cabeçalho já existir)
  • \n
  • Add — adiciona outro valor ao já existente (cria uma duplicata)
  • \n
\n

Para a maioria dos casos, use Set — é mais seguro.

\n\n

Método 3: Trabalhando com autenticação (Bearer Token)

\n\n

O cenário mais comum é a transmissão de um token JWT. Veja como fazer isso corretamente:

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n)\n\nfunc main() {\n    token := "your_jwt_token_here"\n    url := "https://api.example.com/protected"\n\n    req, _ := http.NewRequest("GET", url, nil)\n\n    // Definir o cabeçalho Authorization\n    req.Heade                

Blogs

Book Recommendations