Saltar para o conteúdo
Comece grátis
Voltar ao blogue

Cookies HTTP: Um guia para programadores sobre a extração de sessões

Gabriel CiociÚltima atualização em 14 min read
Cookies HTTP: Um guia para programadores sobre a extração de sessões
Resumo: Os cookies HTTP permitem que um cliente mantenha o estado entre pedidos, mas um cookie armazenado não é garantia de uma sessão autenticada. Utilize um «cookie jar», mantenha as contas isoladas, compreenda as regras específicas de cada navegador e valide a página devolvida antes de a tratar como dados extraídos.

O seu scraper solicita uma página de catálogo e recebe uma resposta bem-sucedida. O analisador não encontra quaisquer produtos. Num navegador, o mesmo URL funciona. Antes de alterar os seletores, verifique se a resposta é, de facto, uma página de início de sessão, um seletor de região ou um ecrã de consentimento.

Os cookies HTTP são pequenos fragmentos de estado que um cliente armazena e pode enviar com pedidos subsequentes. Muitas vezes, explicam por que razão URLs idênticas devolvem conteúdos diferentes. Um cookie pode identificar uma sessão, lembrar um idioma ou transportar uma preferência da aplicação. O significado pertence à aplicação, não ao próprio protocolo de cookies.

Para os programadores que recolhem dados, a competência importante é gerir esse estado de forma deliberada. É necessário saber qual o cliente que recebeu um cookie, para onde este pode ser transmitido, se o servidor ainda o aceita e como diagnosticar falhas sem divulgar credenciais nos registos.

Este guia acompanha um cookie desde a resposta até à solicitação, distingue um cliente HTTP de um navegador e apresenta um exercício local em Python que torna o comportamento da sessão observável. Centra-se nas suas próprias aplicações e nas contas que está autorizado a utilizar. Copiar a sessão de outra pessoa não é um atalho legítimo para o acesso a dados.

Acompanhe os cookies HTTP desde a resposta até ao pedido

Uma troca típica começa com uma resposta do servidor que contém Set-Cookie. O cliente processa o cookie e os seus atributos e, em seguida, decide se deve incluir o par nome-valor num cabeçalho de pedido posterior Cookie . Trata-se de cabeçalhos diferentes com funções distintas, não de cadeias de caracteres intercambiáveis.

A especificação dos cookies HTTP define o mecanismo subjacente de gestão de estado. É importante referir que os cookies de pedido não transportam todos os atributos que apareceram na resposta. Ver um nome e um valor no servidor não indica a duração original do cookie nem o contexto da sua criação.

HTTP/1.1 200 OK
Set-Cookie: preference=compact; Path=/catalog; Secure; SameSite=Lax

GET /catalog/items HTTP/1.1
Host: shop.example
Cookie: preference=compact

Esta troca ilustrativa omite cabeçalhos não relacionados. A segunda mensagem contém o valor da preferência, não Path, Secure, ou SameSite. Esses atributos ajudam o cliente a decidir se deve enviá-lo. Não são valores de preferência adicionais para o seu analisador recolher.

Podem chegar vários cookies em campos separados Set-Cookie campos. Evite tratar esses campos como uma lista separada por vírgulas: uma data de validade pode, por si só, conter uma vírgula. Utilize o tratamento de cookies da biblioteca HTTP em vez de escrever um separador de cabeçalhos improvisado que funcione apenas na sua primeira resposta de teste.

Para uma tarefa de recolha, pense em termos de uma sequência, em vez de um único pedido. A página de destino pode definir uma região. Uma resposta posterior pode atualizar uma sessão. Um redirecionamento pode emitir outro cookie antes de a página final ser carregada. Guardar apenas os cabeçalhos visíveis da última resposta pode ocultar o passo que alterou o estado.

Anote a sequência esperada para a sua integração. Por exemplo: estabelecer a sessão permitida, confirmar a região selecionada, solicitar a página de recolha e verificar o marcador específico dos dados. Este pequeno modelo torna mais fácil distinguir falhas de alterações no HTML.

Interprete os atributos dos cookies como regras de encaminhamento e acesso

O âmbito do cookie faz parte da correção. Uma preferência destinada a um caminho não deve tornar-se acidentalmente uma suposição global em todo o rastreador. Da mesma forma, podem existir dois cookies com o mesmo nome em âmbitos diferentes. Agrupá-los num único dicionário pode fazer com que se perca informação de que venha a precisar mais tarde.

A referência Set-Cookie documenta os atributos e o seu comportamento no navegador. A tabela seguinte é um auxílio prático à leitura, não uma implementação substituta do algoritmo de seleção do navegador.

Atributo

Pergunta que ajuda a responder

Implicações para o coletor

Domain

Que anfitriões estão no âmbito?

Preservar o âmbito do host ao importar o estado

Path

Que percursos de pedido correspondem?

Um cookie de uma secção pode não acompanhar outra

Secure

É necessário transporte encriptado?

Não rebaixe uma sessão de produção para HTTP

HttpOnly

O JavaScript da página consegue lê-lo?

A ausência de um valor em document.cookie não prova a ausência

Expires / Max-Age

Quando é que o cliente deve deixar de o reter?

Verifique a data de validade antes de culpar os seletores

SameSite

Esta solicitação do navegador é válida no contexto do seu site?

Um fluxo entre sites difere de uma solicitação direta

Trate esta tabela como uma lista de verificação para depuração. Quando um cookie estiver visível no armazenamento, mas ausente da solicitação de saída, compare o destino e o contexto reais com o seu âmbito. Não alargue o domínio nem remova atributos de segurança apenas para que um teste seja aprovado. Isso altera a experiência e pode causar uma fuga de credenciais.

Uma distinção importante é a duração do cookie armazenado em comparação com a duração da sessão do lado do servidor. Um cookie pode permanecer presente mesmo que a sua sessão tenha sido revogada. Por outro lado, um navegador pode restaurar o estado da sessão após um reinício. «O cookie existe» e «o utilizador está autenticado» são observações distintas.

Distinga também o nome do cookie da conta que este representa. Um nome como session não fornece nenhuma informação fiável sobre as suas permissões ou proprietário. Mantenha essa associação na configuração controlada da sua tarefa e verifique-a através de uma verificação de identidade específica da aplicação e não sensível, quando disponível.

A omissão de Domain cria um cookie apenas para o anfitrião; defini-lo permite incluir subdomínios. Para pedidos do navegador, SameSite=Strict exclui a utilização entre sites, enquanto Lax permite determinadas navegações de nível superior utilizando métodos seguros, e não simples recuperações entre sites. SameSite=None exige Secure, e as restrições de terceiros do navegador podem ainda impedir a transmissão. HttpOnly impede que o JavaScript da página leia o valor, mas os pedidos elegíveis iniciados por JavaScript ainda podem transportar o cookie. Estas distinções são a razão pela qual a inspeção document.cookie por si só seja um teste incompleto.

Para um procedimento prático de depuração, anote tanto a página de origem como o URL solicitado. A afirmação «A solicitação vai para o mesmo ponto final» omite o contexto que pode explicar comportamentos diferentes dos navegadores. Teste a navegação direta e as solicitações incorporadas separadamente quando ambas pertencerem ao seu fluxo de trabalho permitido e documente qual o caso que o coletor deve reproduzir.

Escolha entre um cliente HTTP e um navegador real

Um cliente HTTP envia pedidos e processa respostas. Um navegador, além disso, executa scripts e mantém o contexto da página em que os pedidos ocorrem. Essa diferença explica por que razão a exportação de cookies HTTP a partir de um navegador não é uma forma universal de reproduzir uma sessão de navegador.

Comece com o cliente mais simples que suporte o fluxo de trabalho aprovado. Se um ponto de extremidade documentado ou uma página renderizada pelo servidor fornecer os dados necessários, uma sessão HTTP persistente é frequentemente suficiente. Se a aplicação necessitar de navegação ou interação orientadas por scripts, um navegador pode ser a camada de recolha adequada. O nosso guia do cliente HTTP em Python ajuda a orientar essa escolha.

Comportamento

Cliente de sessão HTTP

Contexto do navegador

Manter cookies entre pedidos

Normalmente fornecido por um «cookie jar»

Gerido como estado do navegador

Executar o JavaScript da página

Não por si só

Sim

Manter o armazenamento local

Não automaticamente

Disponível na origem

Aplicar política de navegação do navegador

Não é equivalente a um navegador

Depende da implementação e das definições do navegador

Reproduzir a interação da aplicação

Sequência de pedidos explícita

Navegação, cliques, formulários e execução de scripts

Não se deve inferir um comportamento de segurança idêntico a partir de uma biblioteca que aceite os mesmos atributos de cookie. Um «cookie jar» de uso geral não é um mecanismo de privacidade do navegador. Em particular, não fornece o mesmo contexto de site de nível superior utilizado para analisar os pedidos do navegador. Teste o cliente que efetivamente implementa, em vez de tirar conclusões com base num ambiente de execução diferente.

O erro oposto consiste em adicionar um navegador a todas as tarefas de recolha sem identificar a capacidade em falta. A execução no navegador introduz mais estado e mais elementos a diagnosticar. Registe a razão pela qual é necessário: um campo renderizado, uma interação ou um fluxo de autenticação gerido pela aplicação. «Funcionou no meu navegador» é uma observação inicial, não uma decisão de arquitetura.

Ao utilizar a automatização, isole os contextos por conta e tarefa. O estado partilhado do navegador pode alterar silenciosamente a região, a organização selecionada ou o utilizador por trás de pedidos posteriores. O nosso guia de automatização do Playwright fornece um contexto mais abrangente para controlar uma página interativa.

O exemplo seguinte, da biblioteca padrão, executa um pequeno servidor local e um cliente num único processo. O servidor define um cookie de demonstração não confidencial. O cliente retém-no e reenvia-o na segunda solicitação. Não está envolvido nenhum site externo, conta ou credencial.

A documentação do http.cookiejar do Python descreve o «cookie jar» e a sua integração com os manipuladores de pedidos. Aqui, o comportamento útil é a retenção automática: o exemplo nunca cria manualmente um Cookie cabeçalho de pedido.

from http.server import BaseHTTPRequestHandler, HTTPServer
from http.cookiejar import CookieJar
from threading import Thread
from urllib.request import build_opener, HTTPCookieProcessor

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        if self.path == "/start":
            self.send_header("Set-Cookie", "demo=ready; Path=/")
        self.end_headers()
        value = self.headers.get("Cookie", "no cookie")
        self.wfile.write(value.encode("utf-8"))

    def log_message(self, *args):
        pass

server = HTTPServer(("127.0.0.1", 0), Handler)
thread = Thread(target=server.serve_forever, daemon=True)
thread.start()
client = build_opener(HTTPCookieProcessor(CookieJar()))
base = f"http://127.0.0.1:{server.server_port}"
try:
    with client.open(base + "/start", timeout=5) as response:
        response.read()
    with client.open(base + "/check", timeout=5) as response:
        result = response.read().decode("utf-8")
    assert result == "demo=ready"
    print("Cookie retained and returned")
finally:
    server.shutdown()
    server.server_close()
    thread.join()

O transporte HTTP local é intencional para uma demonstração autónoma. Este não é um servidor de autenticação de produção e o cookie não é confidencial. Para sessões de produção, utilize HTTPS e as definições de segurança documentadas da aplicação. Não copie este manipulador para um serviço público.

Amplie o exercício com um segundo cliente inicial independente. Este não deve herdar o cookie do primeiro cliente. Esse teste simples capta uma propriedade útil em produção: uma nova sessão inicia-se sem o estado de outra tarefa. Também pode alterar o caminho do cookie e solicitar um caminho que não corresponda para observar as decisões de âmbito neste cliente específico.

O exemplo demonstra a retenção do cookie, não a autenticação. Uma integração real requer uma verificação de resposta separada para a conta ou tipo de página esperados. Mantenha essa distinção nos seus testes: as asserções de estado de transporte explicam o mecanismo, enquanto as asserções da aplicação determinam se o conteúdo devolvido é adequado para extração.

Mantenha a propriedade da sessão explícita entre os trabalhadores

Um coletor que processa várias contas necessita de um proprietário claro para cada conjunto de cookies. Atribua o estado por conta aprovada e contexto de recolha. Evite uma sessão global partilhada por tarefas não relacionadas, mesmo que cada pedido utilize o mesmo nome de anfitrião.

Para integrações em Python, o guia avançado do Requests indica que uma sessão mantém os cookies e reutiliza ligações. Essas conveniências não determinam a sua política de isolamento de contas. Construa o ciclo de vida da sessão em torno do seu fluxo de trabalho, em vez de deixar que um objeto global de longa duração o defina acidentalmente.

Considere dois trabalhadores a recolher relatórios para organizações diferentes no âmbito do mesmo serviço. Se partilharem um estado de autenticação mutável, um início de sessão ou uma mudança de organização pode afetar o outro. A falha pode traduzir-se em dados plausíveis atribuídos ao cliente errado, o que é mais difícil de detetar do que uma exceção. Inclua a organização esperada no contrato de validação, e não apenas os nomes de colunas esperados.

Utilize um único responsável lógico para atualizar uma sessão. Se cada trabalhador reagir de forma independente à expiração, o grupo pode gerar inícios de sessão redundantes ou substituir um estado mais recente por um mais antigo. Uma etapa de atualização controlada pode suspender o trabalho dependente, estabelecer um estado válido e retomar apenas após a verificação de identidade ser aprovada.

Evite presumir segurança de threads quando uma biblioteca cliente não a garantir. Objetos de transporte separados são frequentemente mais fáceis de compreender do que a mutação simultânea de um jar partilhado. Se a sua arquitetura distribuir o trabalho por processos, defina como o estado é transferido, por quanto tempo permanece válido e qual o componente autorizado a substituí-lo.

Mantenha o contexto não relacionado com a autenticação juntamente com essa propriedade. As preferências de localização e moeda podem alterar valores extraídos sem alterar a identidade da conta. Um registo de tarefa útil identifica a fonte, o âmbito esperado da conta, a região e o identificador de geração do estado. Não deve conter os próprios valores secretos dos cookies.

Depure sessões falhadas sem expor os seus valores

Quando uma tarefa deixar de extrair dados, comece por classificar a resposta. Verifique o URL final, o estado, o tipo de conteúdo, o marcador de página esperado e a sequência de redirecionamentos. Uma resposta HTTP de sucesso que contenha um formulário de início de sessão constitui uma falha da aplicação para o seu coletor, mesmo que o pedido de rede tenha sido concluído.

Registe o mínimo de evidência necessária para identificar a etapa em que ocorreu a falha. Nomes de cookies, domínios de âmbito, percursos e observações sobre a expiração podem ser suficientes. Ocultem os valores em registos de pedidos, relatórios de exceções, capturas de ecrã e registos do navegador guardados. Um pacote de depuração não deve tornar-se um pacote de início de sessão portátil.

Sintoma

Primeira verificação

Evitar

Página de início de sessão devolvida com o estado 200

URL final e marcador da página autenticada

Considerar o estado, por si só, como um sucesso

Cookie armazenado, mas não enviado

Host de destino, caminho, transporte, prazo de validade

Simplificação do ficheiro JAR e imposição de todos os valores

O navegador funciona, mas o script falha

Interações necessárias e outros tipos de armazenamento

Partindo do princípio de que os cookies representam toda a sessão

Localização ou dados da conta incorretos

Proprietário da sessão e contexto da aplicação

Partilha de um ficheiro JAR global

Falhas repetidas na expiração

Atualização do ciclo de vida e rejeição do servidor

Um ciclo de início de sessão sem fim

Mantenha um pequeno fixture de falha editado, quando permitido. Este pode demonstrar que um seletor corresponde agora a um campo de início de sessão sem preservar a identidade ou o token do utilizador. Teste o seu classificador de respostas em relação a esse fixture, para que a mesma falha não possa entrar novamente no conjunto de dados sem ser detetada.

Os cookies de sessão não são o único elemento sensível na automação do navegador. A documentação de autenticação do Playwright alerta que o estado de autenticação guardado pode permitir a usurpação de identidade e não deve ser submetido para repositórios. Trate o estado exportado como material de credenciais com acesso restrito e uma política de eliminação definida.

Em caso de escalamento, relate o que mudou em vez de enviar tudo: o identificador da execução, a última verificação de identidade bem-sucedida, a categoria de falha e as evidências de resposta censuradas. Isso proporciona ao próximo engenheiro uma investigação reproduzível, mantendo ao mesmo tempo o acesso à conta fora do sistema de gestão de problemas.

Pontos-chave

  • Deixe que um «cookie jar» gere os cookies HTTP, em vez de copiar cabeçalhos em bruto entre pedidos.
  • Distinga entre o estado armazenado, a elegibilidade da solicitação e a validade da sessão do lado do servidor.
  • Escolha um navegador apenas quando o fluxo de trabalho necessitar de funcionalidades do navegador.
  • Isole o estado da conta e da região entre os trabalhadores de recolha.
  • Valide a identidade da página e oculte os artefactos de autenticação antes de registar falhas.

Perguntas frequentes

Os cookies são programas executáveis?

Não. Um cookie é um dado armazenado, não um código executável. O seu valor pode, ainda assim, ser sensível, e uma aplicação pode comportar-se de forma diferente quando recebe esse valor. Avalie o que o cookie representa e por onde passa, em vez de tratar todos os cookies como preferências inofensivas ou ficheiros intrinsecamente maliciosos.

Não. A remoção do estado local não elimina os registos previamente guardados pelo seu coletor ou por outro serviço. Esses conjuntos de dados necessitam dos seus próprios controlos de retenção e eliminação. Mantenha a limpeza da sessão e a gestão do ciclo de vida dos dados separadas, para que um logout bem-sucedido não seja confundido com prova de que os registos a jusante foram apagados.

Posso reproduzir um preço personalizado guardando apenas o URL?

Não de forma fiável. Um URL pode omitir o contexto que influenciou a oferta apresentada, incluindo a elegibilidade da conta, a localização ou escolhas anteriores. Registe o contexto de observação não sensível necessário para a interpretação. Não inclua segredos de autenticação num conjunto de dados partilhado apenas para o tornar reproduzível; em vez disso, utilize um processo de repetição controlado.

Conclusão

O tratamento fiável das sessões começa com um pequeno conjunto de perguntas explícitas: qual é o cliente responsável por este estado, para onde pode este ser transmitido e o que comprova que a resposta pertence ao fluxo de trabalho pretendido? Os cookies HTTP ajudam a responder a parte desse problema, mas não substituem a validação da aplicação.

Comece por um teste de retenção local e, em seguida, teste a sequência permitida de início de sessão e recolha da integração real. Mantenha um único proprietário da sessão, identifique a resposta esperada e trate a expiração como uma transição de estado delimitada. Quando o comportamento divergir do navegador, investigue a funcionalidade em falta no navegador, em vez de remover as proteções dos cookies ou copiar um perfil na íntegra.

Se a recuperação de páginas constituir um encargo operacional separado, avalie a API Scraper da WebScrapingAPI para essa camada, mantendo a autorização da conta e a titularidade da sessão explícitas na sua aplicação. Um serviço de recuperação não transforma uma credencial numa permissão. O coletor final deve tornar o seu estado compreensível sem o tornar público.

Sobre o autor

Gabriel Cioci, Desenvolvedor Full-Stack @ WebScrapingAPI

Gabriel Cioci

Desenvolvedor Full-Stack

Gabriel Cioci é um programador Full Stack na WebScrapingAPI, responsável pela criação e manutenção dos sites, do painel do utilizador e das principais funcionalidades da plataforma destinadas aos utilizadores.

Web Scraping com AWS Lambda: Guia para Python e Java 2026
Guias

Web Scraping com AWS Lambda: Guia para Python e Java 2026

TL;DR: Resumo: A extração de dados da Web com o AWS Lambda funciona melhor quando cada invocação é curta, delimitada e pode ser repetida de forma independente. Comece com HTTP direto, AWS SAM e S3 e, só depois, adicione SQS, contentores, renderização no navegador, proxies ou uma camada de recuperação gerida, apenas quando a carga de trabalho demonstrar que precisa deles.

Suciu Dan32 min read
Ler artigo
Como utilizar o GoSpider: rastrear, limpar URLs e extrair dados
Guias

Como utilizar o GoSpider: rastrear, limpar URLs e extrair dados

TL;DR: Resumo: O GoSpider é um rastreador de linha de comandos destinado a descobrir URLs, não um extrator completo de dados estruturados. Este guia sobre como utilizar o GoSpider mostra como realizar um rastreio limitado, gerir resultados de forma organizada, fazer a transferência de dados do Colly para CSV e seguir um percurso de diagnóstico para respostas 403 ou páginas que exijam renderização em JavaScript.

Suciu Dan23 min read
Ler artigo
Como fazer o Scrape Redfin: Guia Python para Dados de Propriedade
Guias

Como fazer o Scrape Redfin: Guia Python para Dados de Propriedade

TL;DR: A Redfin expõe pontos de extremidade de API ocultos que retornam JSON estruturado para listagens de propriedades, tornando possível ignorar totalmente a análise HTML frágil. Este guia orienta-o na construção de um scraper Python que extrai dados de aluguer e venda, pesquisa por localização, monitoriza novas listagens através de sitemaps XML e exporta resultados limpos para CSV ou JSON.

Suciu Dan14 min read
Ler artigo

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.