Como enviar cabeçalhos HTTP com cURL

Explore o poder dos cabeçalhos HTTP no Scraping de dados da web e aprenda a usar o curl para enviar cabeçalhos personalizados com eficiência, aprimorando a coleta de dados e a interação com o servidor.
9 min de leitura
How to Send HTTP Headers with cURL main blog image

O Protocolo de Transferência de Hipertexto (HTTP) é um protocolo sem estado que segue o modelo cliente-servidor, no qual um cliente faz uma solicitação e aguarda uma resposta do servidor. A solicitação inclui detalhes como o método HTTP, a localização do servidor, o caminho, a string de consulta e os cabeçalhos.

Os cabeçalhos HTTP são campos ou listas de strings como pares de chave-valor que facilitam a transmissão de metadados e instruções. Eles são fundamentais para definir parâmetros como tipo de conteúdo, comportamento de cache e autenticação, garantindo interações eficientes e seguras entre clientes e servidores. No Scraping de dados da web, os cabeçalhos HTTP permitem personalizar solicitações, permitindo que os Scrapers de dados da web imitem agentes de usuário, controlem a negociação de conteúdo e lidem com a autenticação de acordo com as políticas e protocolos do site.

Alguns casos de uso comuns de cabeçalhos HTTP no Scraping de dados incluem alterar o agente do usuário (UA) ou o tipo de resposta, realizar solicitações condicionais e autenticar em APIs.

Neste artigo, você aprenderá como enviar cabeçalhos HTTP como curl.

Enviando cabeçalhos HTTP com cURL

Antes de iniciar este tutorial, verifique se o curl está instalado em seu sistema operacional executando o seguinte comando em seu terminal:

curl --version

Se estiver instalado, você verá um número de versão na saída, assim:

curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Data de lançamento: [não lançado]
Protocolos: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Recursos: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

Se você receber uma mensagem de erro, comocurl não é reconhecido como um comando interno ou externo, programa operável ou arquivo em loteoucomando não encontrado, então você precisainstalar o curl.

Você também precisa de uma ferramenta para inspecionar cabeçalhos, comohttpbin.org, que é um serviço simples de solicitação e resposta HTTP.

Se você já trabalhou com o curl antes, sabe que a sintaxe do curl é assim:

curl [opções] [url]

Isso significa que, se você quiser baixar uma página da web do site mywebpage.com, precisará executar o seguinte comando:

curl www.mywebpage.com

Cabeçalhos cURL

Para visualizar os cabeçalhos enviados pelo curl usando httpbin.org, abra sua linha de comando e execute o seguinte:

curl http://httpbin.org/headers

Sua saída deve incluir uma lista dos cabeçalhos:

{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd2eb0-0617353714d52f3777c9c267"
  }

Os cabeçalhos Accept, Host e User-Agent são enviados por padrão com o curl.

O cabeçalho Accept informa ao servidor quais tipos de mídia o cliente pode aceitar. Ele comunica ao servidor os tipos de conteúdo que o cliente está disposto a aceitar, permitindo a negociação de conteúdo entre o cliente e o servidor.

Um cabeçalho Accept que mostra que o cliente prefere JSON tem a seguinte aparência:

Accept: application/json

O campo User-Agent contém os detalhes do seu cliente, que, neste caso, é o aplicativo curl executando a versão 7.55.1 (este número de versão corresponderá à sua versão).

O cabeçalho Host identifica de forma exclusiva o domínio da web (ou seja, o host) e a porta para a qual a solicitação HTTP está sendo enviada. Se não houver uma porta incluída na solicitação, os padrões serão assumidos (ou seja, porta 80 para HTTP e porta 443 para HTTPS).

X-Amzn-Trace-Id é o único cabeçalho na saída que não é um cabeçalho padrão. Esse cabeçalho mostra que sua solicitação foi enviada a um serviço da Amazon Web Services (AWS), como um balanceador de carga da AWS, e pode ser usado para rastrear solicitações HTTP.

Para verificar se esses cabeçalhos foram enviados pelo curl por padrão, você pode usar o modo verboso. O sinalizador para isso é -v ou --verbose e exibe informações detalhadas sobre a solicitação e a resposta, incluindo os cabeçalhos.

Execute o seguinte comando para visualizar os cabeçalhos padrão enviados pelo curl:

curl -v http://httpbin.org/headers

Sua saída deve ser semelhante a esta:

* Tentando 50.16.63.240...
* TCP_NODELAY definido
* Conectado a httpbin.org (50.16.63.240) porta 80 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.55.1
> Aceitar: */*
>
< HTTP/1.1 200 OK
< Data: Sexta-feira, 22 de março de 2024, 07:18:00 GMT
< Tipo de conteúdo: application/json
< Comprimento do conteúdo: 173
< Conexão: manter ativa
< Servidor: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd30a8-624365ad52781957578cd5b1"
  }
}
* Conexão #0 com o host httpbin.org mantida intacta

As linhas com um sinal maior que (>) mostram o que seu cliente (curl) enviou para o endpoint. Essa saída confirma que os seguintes cabeçalhos foram enviados:

  • GET(método HTTP) para o endpoint/cabeçalhos
  • Hostcom o valorhttpbin.org
  • User-Agentcom o valorcurl/7.55.1
  • Acceptcom o valor*/*

Na saída, as linhas com um sinal menor que, como < Content-Type: application/json, são reflexos dos cabeçalhos que você enviou.

Alterar os cabeçalhos padrão usando o sinalizador -H

O sinalizador -H ou --header é usado para passar cabeçalhos personalizados para o servidor e também pode ser usado para testes.

Por exemplo, para alterar o User-Agent de curl/7.55.1 para Seu-Novo-User-Agent, use o seguinte comando:

curl -H "User-Agent: Your-New-User-Agent" http://httpbin.org/headers

Sua saída ficará assim:

{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "Your-New-User-Agent",
    "X-Amzn-Trace-Id": "Root=1-65fd5123-3ebe566a4681427c6996c72c"
  }
}

Se você quiser alterar o cabeçalho Accept de */*, que aceita qualquer tipo de conteúdo, para application/json, que aceita apenas conteúdo no formato JSON, use o seguinte comando:

curl --header "Accept: application/json" http://httpbin.org/headers

Sua saída ficará assim:

{
  "headers": {
    "Accept": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd55c3-05c21f81770c1c5e6343b1fc"
  }
}

Observação: no segundo exemplo, --header foi usado em vez de -H. --header e -H são intercambiáveis e desempenham a mesma função.

Desde a versão 7.55.0 do curl, você também pode passar um arquivo com seus cabeçalhos. Por exemplo, se o nome do arquivo com seus cabeçalhos for header_file, você pode usar o seguinte comando para passar um arquivo com seus cabeçalhos:

Curl -H @header_file

Enviar cabeçalhos personalizados

Os cabeçalhos personalizados são definidos pelos desenvolvedores e incluem informações adicionais sobre as solicitações HTTP além das fornecidas pelos cabeçalhos padrão.

Para enviar um cabeçalho personalizado com o curl, você pode usar o sinalizador -H. Por exemplo, se você deseja enviar um cabeçalho personalizado chamado My-Custom-Header com o valor value do cabeçalho personalizado, execute o seguinte comando:

curl -H "My-Custom-Header: Value of custom header" http://httpbin.org/headers

Sua saída será semelhante a esta:

{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "My-Custom-Header": "Value of custom header",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd7d2a-3b683be160ff2965023b3a31"
  }
}

Enviar cabeçalhos vazios

Existem cenários em que é necessário enviar cabeçalhos vazios, como para cumprir requisitos específicos da API que exigem determinados cabeçalhos, mesmo que eles não tenham nenhum conteúdo. Por exemplo, ocabeçalho HTTP Strict Transport Security (HSTS)é usado para impor conexões HTTPS seguras em sites. Embora esse cabeçalho geralmente inclua diretivas sobre a duração e o comportamento do HSTS, enviá-lo com um valor vazio garante a aplicação imediata do HSTS.

Você também pode usar cabeçalhos vazios para limpar ou redefinir cabeçalhos. Por exemplo, se você deseja redefinir ou limpar um cabeçalho que foi definido anteriormente por padrão, o envio de um cabeçalho vazio pode limpar o valor do cabeçalho.

Para enviar um cabeçalho vazio com o curl, você precisa especificar o nome do cabeçalho seguido por um ponto-e-vírgula para indicar um valor vazio. O comando a seguir mostra como você pode enviar um cabeçalho personalizado vazio chamado My-Custom-Header:

curl -H "My-Custom-Header;" http://httpbin.org/headers

A saída mostra My-Custom-Header com um valor vazio:

{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "My-Custom-Header": "",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd84e2-7a42d9d62a42741e448c426f"
  }
}

Remover um cabeçalho

Para remover um cabeçalho com o curl, você precisa especificar o nome do cabeçalho seguido por dois pontos, sem nenhum valor.

Por exemplo, para remover o cabeçalho User-Agent padrão, envie o seguinte comando:

curl -H "User-Agent:" http://httpbin.org/headers

A resposta não contém o cabeçalho User-Agent, o que confirma que o cabeçalho foi removido:

{
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "X-Amzn-Trace-Id": "Root=1-65fd862d-13b181583501ae11046374a1"
  }
}

Enviar vários cabeçalhos

Até agora, você viu exemplos que incluem apenas um cabeçalho, mas é possível enviar mais de um cabeçalho com o curl. Tudo o que você precisa fazer é incluir o sinalizador -H várias vezes.

Por exemplo, se você deseja enviar dois cabeçalhos (Custom-Header-1 e Custom-Header-2) com os valores um e dois, respectivamente, execute o seguinte comando:

curl -H "Custom-Header-1: um" -H "Custom-Header-2: dois" http://httpbin.org/headers

Sua saída ficará assim:

{
  "headers": {
    "Accept": "*/*",
    "Custom-Header-1": "one",
    "Custom-Header-2": "two",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-65fd8781-143be3502c559bc5605fc6f1"
  }
}

Conclusão

Neste artigo, você aprendeu sobre cabeçalhos HTTP e como enviá-los com o curl.

Se você está procurando uma solução abrangente de Scraping de dados, experimenteo Bright Data. Ele oferece ferramentas e serviços comoserviços de Proxy, que ajudam a garantir o anonimato e impedir o bloqueio de IP, eo Web Unlocker, que ajuda você a acessar conteúdo restrito geograficamente sem CAPTCHAs.

Comece hoje mesmo seu teste grátis!