Compreender os cabeçalhos HTTP
Os cabeçalhos HTTP são pares chave-valor que se enviam como parte de um pedido ou resposta HTTP. São separados por dois pontos e um espaço, e os seus nomes (chaves) não distinguem maiúsculas de minúsculas.
Pode agrupar os cabeçalhos HTTP em diferentes categorias, dependendo da sua função e da direção em que os envia. Estas categorias incluem:
- cabeçalhos gerais: aplicam-se tanto às mensagens de solicitação como às de resposta
- Cabeçalhos de solicitação: contêm mais informações sobre o recurso que pretende obter ou sobre o cliente que está a efetuar a solicitação
- cabeçalhos de resposta: contêm informações adicionais sobre a resposta, tais como a sua localização ou o servidor que a fornece
- cabeçalhos da entidade: contêm informações sobre o corpo do recurso, tais como o seu tamanho ou tipo MIME
- cabeçalhos de extensão: utilizados para garantir a compatibilidade com versões anteriores
Os cabeçalhos HTTP fornecem uma vasta gama de informações, incluindo o tipo de pedido que está a efetuar, o navegador que está a utilizar e quaisquer informações adicionais de que o servidor necessita para processar o pedido.
Além disso, permitem-lhe fornecer informações de autenticação e segurança, controlar o armazenamento em cache e a compressão, bem como especificar o idioma e o conjunto de caracteres do pedido.
Por exemplo, eis os cabeçalhos que o Chrome envia ao aceder ao youtube.com:
:authority: www.youtube.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: no-cache
pragma: no-cache
referer: https://www.google.com/
sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"
sec-ch-ua-arch: "x86"
sec-ch-ua-bitness: "64"
sec-ch-ua-full-version: "109.0.5414.75"
sec-ch-ua-full-version-list: "Not_A Brand";v="99.0.0.0", "Google Chrome";v="109.0.5414.75", "Chromium";v="109.0.5414.75"
sec-ch-ua-mobile: ?0
sec-ch-ua-model: ""
sec-ch-ua-platform: "Windows"
sec-ch-ua-platform-version: "15.0.0"
sec-ch-ua-wow64: ?0
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
x-client-data: CIm2yQEIorbJAQjEtskBCKmdygEI5PDKAQiWocsBCKr2zAEI7oLNAQibiM0BCLqIzQEI9YjNAQ==
Decoded:
message ClientVariations {
// Active client experiment variation IDs.
repeated int32 variation_id = [3300105, 3300130, 3300164, 3313321, 3324004, 3330198, 3357482, 3359086, 3359771, 3359802, 3359861];
}Compreender os cookies da Web
Os cookies da Web, ou cookies HTTP, são pequenos ficheiros de texto que um site armazena no navegador do utilizador. A partir daí, sempre que o utilizador envia um novo pedido ao site, os cookies são incluídos automaticamente.
São identificáveis de forma única e pode encontrá-los como:
- cookies de sessão: são temporários e expiram quando o utilizador fecha o navegador
- cookies persistentes: têm uma data de validade específica e permanecem no dispositivo do utilizador até expirarem ou serem eliminados pelo utilizador.
Os sites utilizam cookies para personalizar a experiência do utilizador. Isto pode incluir a memorização das suas informações de início de sessão e o armazenamento do conteúdo do carrinho de compras, com o objetivo de compreender como os utilizadores interagem com o site e apresentar publicidade direcionada.
Tomando o youtube.com como exemplo também neste caso, podemos ver o que os cookies armazenam:
cookie: CONSENT=YES+srp.gws-20210816-0-RC3.ro+FX+801; __Secure-3PAPISID=jG4abs_wYhyzcDG5/A2yfWlePlb1U9fglf; VISITOR_INFO1_LIVE=pJuwGIYiJlE; __Secure-3PSIDCC=AEf-XMRV_MjLL0AWdGWngxFHvNUF3OIpk3_jdeUwRiZ76WZ3XsSY0Vlsl1jM9n7FLprKTqFzvw; __Secure-3PSID=RAi8PYLbf3qLvF1oEav9BnHK_eOXwimNM-0xwTQPj1-QVG1Xwpz17T4d-EGzT6sVps1PjQ.; YSC=4M3JgZEwyiA; GPS=1; DEVICE_INFO=ChxOekU1TURJMk1URTBOemd5TWpJeU5qVTJOdz09EOvgo54GGOvgo54G; PREF=tz=Europe.Bucharest&f6=40000000&f4=4000000; CONSISTENCY=ACHmjUr7DnoYSMf5OL-vaunKYfoLGz1lWYRUZRepFyIBDRpp_jrEa85E4wgRJLJ2j15l688hk9IVQu7fIjYXo7sdsZamArxVHTMuChgHd22PkX_mbfifnMjyp4OX2swyQJRS-8PE6cOCt_6129fGyBs; amp_adc4c4=Ncu7lbhgeiAAYqecSmyAsS.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn4emd4v.1gn4en556.0.4.4A importância dos cabeçalhos e dos cookies na extração de dados da Web
No web scraping, é possível utilizar cabeçalhos e cookies para contornar medidas de segurança e aceder a conteúdos restritos, bem como para fornecer informações que ajudem a identificar o seu script de scraping como um navegador legítimo.
Por exemplo, ao especificar o cabeçalho User-Agent correto (mais detalhes na secção seguinte), pode fazer com que o seu script pareça ser o navegador Chrome, o que pode ajudá-lo a evitar ser detetado pelo site.
Além disso, ao armazenar e enviar cookies, o seu scraper pode aceder a conteúdos que só estão disponíveis para utilizadores que tenham iniciado sessão. Uma vez que o site utiliza cookies para apresentar publicidade direcionada, também pode utilizá-los para extrair dados mais precisos e compreender melhor o site.
Além de experimentar com cabeçalhos HTTP e cookies, considere algumas práticas recomendadas bastante úteis para a extração de dados da Web, listadas neste guia.
Cabeçalhos comuns utilizados na extração de dados da Web
Existem muitos cabeçalhos diferentes que podem ser utilizados na extração de dados da Web, mas alguns dos mais comuns são:
User-Agent
É utilizado para identificar o navegador e o sistema operativo utilizados pelo cliente que efetua o pedido. Esta informação é utilizada pelos servidores para determinar qual o navegador e o sistema operativo que o cliente está a utilizar, de modo a fornecer o conteúdo e as funcionalidades adequadas.
A cadeia User-Agent contém informações como o nome do navegador, a versão e a plataforma. Por exemplo, uma cadeia User-Agent para o Google Chrome no Windows pode ter o seguinte formato:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/109.0.0.0 Safari/537.36
No web scraping, ao especificar um User-Agent que pertença a um navegador web comum, pode fazer com que o seu script pareça um navegador habitualmente utilizado por utilizadores legítimos, tornando assim menos provável que seja bloqueado.
Aceitar
É utilizado para especificar os tipos de conteúdo que o navegador está disposto a aceitar em resposta a um pedido HTTP, tais como texto, imagens, áudio ou vídeo. Um cabeçalho Accept pode ter o seguinte aspeto:
Aceitar:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Na extração de dados da Web, ao especificar o cabeçalho Accept correto, pode garantir que o seu script receba os dados corretos. Por exemplo, se pretender extrair dados de uma página HTML, pode especificar o cabeçalho Accept como text/html.
No entanto, alguns sites podem utilizar este cabeçalho para detetar programas de extração de dados, pelo que é importante utilizá-lo com cuidado e apenas quando necessário.
Accept-Language
Este cabeçalho especifica o idioma preferido do conteúdo que o navegador está disposto a aceitar em resposta a um pedido HTTP. O cabeçalho Accept-Language é utilizado pelos servidores para determinar qual o idioma a enviar ao cliente.
Um navegador que solicite uma página HTML em inglês pode enviar um cabeçalho Accept-Language semelhante a este:
Accept-Language: en-US,en;q=0.9Cookie
Os sites utilizam este cabeçalho para enviar cookies a um cliente após a realização de um pedido. Um cabeçalho Cookie pode ter o seguinte aspeto:
Cookie: session_id=1234567890; user_id=johndoe
No web scraping, pode utilizar este cabeçalho para passar cookies de sessão e aceder a conteúdos que estão disponíveis apenas para utilizadores que tenham iniciado sessão. Outro caso de utilização seria utilizar cookies persistentes para obter resultados personalizados.
Referência
Este cabeçalho especifica o URL da página web anterior a partir da qual foi seguido um link para a página atual. É utilizado pelos servidores para rastrear a origem do pedido e para compreender o contexto do mesmo.
Por exemplo, se um utilizador clicar numa ligação de uma página web para outra, o navegador envia um pedido à segunda página web com o URL da primeira página web no cabeçalho Referer. Assim, o pedido enviado à segunda página web teria um cabeçalho Referer semelhante a este:
Referência: https://www.example.com/
Na extração de dados da Web, pode utilizar o cabeçalho Referer para aceder a sites que não permitem pedidos diretos.
Recuperar cabeçalhos e cookies de um navegador real
Mas chega de teoria. Vamos ver como se pode extrair cabeçalhos HTTP e cookies da Web que são enviados para um site.
Voltando ao nosso exemplo, aceda a youtube.com no seu navegador. Em seguida, clique com o botão direito do rato em qualquer ponto da página e selecione a opção «Inspecionar». Quando as Ferramentas do programador se abrirem, aceda ao separador «Rede».

Depois de atualizar a página, deverá ver os pedidos a carregar em tempo real. Clique no primeiro (e principal) deles e aparecerá um separador adicional.

Aqui pode ver todos os detalhes do pedido que enviou: URL, método, código de estado, endereço remoto e, mais importante ainda: os cabeçalhos do pedido e da resposta que procurávamos.
Utilização de cabeçalhos personalizados na extração de dados da Web
- utilize o httpbin.org para visualizar os cabeçalhos enviados por um navegador
- Escolha uma linguagem de programação e envie um pedido GET básico para ver os cabeçalhos
- passe os cabeçalhos personalizados que obteve
- repita o processo para o Node.js e o Python
- reescrever a secção relativa ao WSA - incluir um link para a documentação da API - descrever a funcionalidade dos cabeçalhos personalizados
Vamos agora ver como podemos utilizar estes cabeçalhos para melhorar os nossos scrapers. Para esta parte, vamos tomar como exemplo um site simples de espelhamento, que nos mostrará diretamente os cabeçalhos que enviamos: https://httpbin.org/headers.

Copie o conteúdo do objeto «headers» e vamos começar a escrever o código.
Node.js
Depois de se certificar de que o seu ambiente Node.js está configurado corretamente e que o seu projeto foi inicializado, execute o seguinte código:
import got from 'got';
(async () => {
const response = await got('https://httpbin.org/headers')
console.log(response.body)
})()
Desta forma, podemos ver como é uma solicitação GET básica. O resultado deverá ser:
{
"headers": {
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"User-Agent": "got (https://github.com/sindresorhus/got)",
"X-Amzn-Trace-Id": "Root=1-63c93ff5-0c352d6319620b3d6b46df02"
}
}
Isto parece muito diferente do que vimos no nosso navegador. Só o User-Agent já facilita bastante ao servidor a deteção de que o pedido é automatizado.
Agora vamos passar os nossos cabeçalhos personalizados e enviar o pedido novamente:
import got from 'got';
(async () => {
const custom_headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9",
"Cache-Control": "no-cache",
"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",
"Host": "httpbin.org",
"Pragma": "no-cache",
"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"
}
const response = await got('https://httpbin.org/headers', {
headers: custom_headers
})
console.log(response.body)
})()
Ao executar o script novamente, deverá notar que agora a nossa solicitação parece ter sido enviada a partir de um navegador Chrome real, apesar de não termos aberto nenhum navegador.
Python
Agora vamos tentar fazer o mesmo em Python. Embora a sintaxe e as bibliotecas sejam diferentes, o princípio é exatamente o mesmo.
import requests
url = 'https://httpbin.org/headers'
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9",
"Cache-Control": "no-cache",
"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",
"Host": "httpbin.org",
"Pragma": "no-cache",
"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"
}
response = requests.get(url, headers=headers)
print(response.text)
O resultado após a execução do script será o mesmo, independentemente da linguagem de programação que utilizar.
Cabeçalhos personalizados na WebScrapingAPI
Qualquer API de scraping que se preze deve oferecer a funcionalidade avançada de enviar cabeçalhos HTTP e cookies personalizados numa solicitação. As normas podem variar consoante a API, por isso certifique-se de consultar sempre a documentação oficial primeiro.
Por predefinição, a WebScrapingAPI inclui um conjunto de cabeçalhos personalizados em cada pedido. Os cabeçalhos User-Agent aleatórios são apenas um dos exemplos.
No entanto, por mais complexos ou desatualizados que os sites possam ficar, tem a liberdade de desativar este comportamento e personalizar totalmente o seu pedido. Certifique-se apenas de obter primeiro uma chave API e, em seguida, execute o código seguinte:
import got from 'got';
(async () => {
const response = await got("https://api.webscrapingapi.com/v1", {
searchParams: {
api_key: "YOUR_API_KEY",
url: "https://httpbin.org/headers",
keep_headers: '0',
},
headers: {
"Wsa-Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Wsa-Accept-Encoding": "gzip, deflate, br",
"Wsa-Accept-Language": "en-US,en;q=0.9",
"Wsa-Cache-Control": "no-cache",
"Wsa-Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",
"Wsa-Pragma": "no-cache",
"Wsa-Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
"Wsa-Sec-Ch-Ua-Mobile": "?0",
"Wsa-Sec-Ch-Ua-Platform": "\"Windows\"",
"Wsa-Sec-Fetch-Dest": "document",
"Wsa-Sec-Fetch-Mode": "navigate",
"Wsa-Sec-Fetch-Site": "none",
"Wsa-Sec-Fetch-User": "?1",
"Wsa-Upgrade-Insecure-Requests": "1",
"Wsa-User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Wsa-X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"
}
})
console.log(response.body)
})()
Neste caso, de acordo com a documentação da API, temos de acrescentar o prefixo «Wsa-» ao nome de um cabeçalho para o incluir na solicitação. Esta medida foi implementada para evitar que sejam incluídos cabeçalhos indesejados, como acontece quando a solicitação da API é enviada a partir de um navegador.
Conclusão
Este artigo apresentou uma visão geral da importância e da utilização dos cabeçalhos HTTP e dos cookies na extração de dados da Web.
Já abordámos o que são cabeçalhos e cookies, como pode utilizá-los para aceder a conteúdos restritos e fazer com que o seu script de scraping pareça um navegador legítimo, bem como a forma como podem ser utilizados para fins de rastreamento e análise.
Apresentámos também alguns dos cabeçalhos mais comuns utilizados na extração de dados da Web e explicámos como recuperar cabeçalhos e cookies a partir de um navegador real. Em seguida, utilizámos exemplos de código para ilustrar como utilizá-los nos seus scripts de extração de dados.
Ao compreender e utilizar eficazmente os cabeçalhos e os cookies, poderá melhorar a eficiência dos seus esforços de web scraping. Com estes conhecimentos, poderá levar as suas competências de scraping para o próximo nível e extrair informações valiosas da Web.




