Sem KYC — sem ID, sem selfie, sem documentos. Pague com cripto: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Português
Comece agora

Referência de erro de proxy · Erros de conexão e TLS

Conexão resetada pelo par (ECONNRESET) através de um proxy

Erro de socket: a mensagem exata em cada ferramenta, as causas prováveis em ordem, e o conserto que funciona.

Última atualização: · 5 min de leitura

Resposta rápida

O que Connection reset by peer (ECONNRESET) significa com um proxy?

Conexão resetada pelo par significa que o outro lado fechou a conexão TCP abruptamente, com um reset ao invés de um fechamento normal. Através dos proxies residenciais do CrawlRelay, as causas comuns são uma conexão keep-alive reutilizada que ficou obsoleta, uma saída que caiu ou um firewall do destino que corta conexões. Refaça requisições seguras em uma nova conexão e não mantenha conexões ociosas por muito tempo.

Connection reset by peer (ECONNRESET) de relance

ErroConnection reset by peer (ECONNRESET)
TipoErro de socket
Enviado porA pilha de rede, depois que o outro lado fechou a conexão abruptamente
Definido emTCP reset (RST segment): RFC 9293
Tentar novamente?Sim, para requisições seguras, em uma nova conexão
Primeira verificaçãoVerifique se os resets ocorrem após conexões reutilizadas ociosas ou em conexões novas

O que Connection reset by peer (ECONNRESET) significa?

O TCP pode encerrar uma conexão graciosamente ou com um reset. Um reset informa à sua máquina que o outro lado descartou a conexão, então qualquer dado em trânsito é perdido. Python gera ConnectionResetError; Node.js gera ECONNRESET ou 'socket hang up'.

"Par" é quem seu socket contata diretamente, que é o gateway proxy. O reset pode se originar mais adiante na cadeia e ser repassado.

Como a connection reset aparece em Python, curl, Node.js e navegadores?

A mesma falha aparece de forma diferente em cada ferramenta. Estas são as mensagens para buscar nos seus logs:

  • Python: ConnectionResetError: [Errno 104] Connection reset by peer, ou [WinError 10054] no Windows
  • requests: ConnectionError(ProtocolError('Connection aborted.', ConnectionResetError(...)))
  • Node.js: Error: socket hang up ou read ECONNRESET
  • curl: curl: (56) Recv failure: Connection reset by peer

O que causa a connection reset?

Mais provável inicialmente:

  • Conexões keep-alive obsoletas. Uma conexão em pool ficou ociosa e foi fechada no outro lado; a próxima requisição nessa conexão falha imediatamente.
  • Uma saída derrubada, que encerra todas as conexões que a usavam.
  • Um firewall no destino que reseta conexões que não gosta.
  • Uploads ou downloads longos cortados por um limite de inatividade em algum ponto do caminho.

Como diagnosticar a connection reset passo a passo?

  1. Verifique se os resets acontecem na primeira requisição de uma conexão ou após reutilização ociosa.
  2. Conte os resets por host: um host indica o destino; todos os hosts indicam o caminho ou o pool.
  3. Observe o tempo: resets após exatamente N segundos ociosos indicam um limite de ociosidade.
Teste a URL com erro usando curl (porta HTTP, modo verbose)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

Como corrigir a connection reset?

  • Refaça requisições idempotentes (GET, HEAD) uma vez em uma nova conexão.
  • Reduza a reutilização ociosa: feche conexões em pool que ficaram ociosas por mais de alguns segundos, ou abra uma nova conexão por requisição quando você precisa de um novo IP de qualquer forma.
  • Encerre uma sessão fixa que reseta repetidamente e inicie uma nova.
  • Desacelere em hosts que resetam sob carga.
Python: tentar novamente com Retry-After, backoff exponencial e jitter
import random
import time

import requests

PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}


def fetch(url, attempts=5, timeout=(10, 30)):
    for attempt in range(attempts):
        try:
            r = requests.get(url, proxies=PROXIES, timeout=timeout)
        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
            r = None  # dropped exit, reset or timeout: a new connection gets a new exit
        if r is not None and r.status_code not in RETRY_STATUSES:
            return r
        retry_after = r.headers.get("Retry-After", "") if r is not None else ""
        if retry_after.isdigit():
            wait = int(retry_after)
        else:
            wait = min(60, 2 ** attempt) + random.uniform(0, 1)
        time.sleep(wait)
    raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))

Devo tentar novamente após a connection reset?

Refaça um reset uma vez para requisições seguras como GET. Não repita automaticamente requisições POST que alteram dados: a primeira pode já ter sido processada. Uma série de resets em um host significa que ele está cortando sua conexão; diminua o ritmo lá.

Como Connection reset by peer (ECONNRESET) se aplica ao CrawlRelay?

No CrawlRelay, a rotação acontece por nova conexão. Um cliente que mantém uma conexão viva mantém a mesma saída em todas as requisições nela, então uma saída derrubada reseta essa conexão. Abra a conexão novamente para obter uma saída nova; o guia de sessões mostra os padrões.

Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS via CONNECT) e porta 7778 (SOCKS5). Formato do usuário: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Relacionado: 502 Bad Gateway · Read timed out · Guia de sessões.

Connection reset by peer (ECONNRESET): perguntas que desenvolvedores fazem

Por que recebo 'socket hang up' em Node.js com um proxy?

A conexão foi fechada antes da resposta chegar. Com proxy, causas comuns são um socket keep-alive reutilizado que ficou obsoleto, uma saída derrubada ou um destino que cortou a conexão. Refaça requisições GET em um socket novo e limite o tempo que sockets ociosos ficam no pool.

Um reset de conexão é sinal de que estou bloqueado?

Às vezes. Firewalls podem resetar conexões de clientes que rejeitam, mas resets também ocorrem por motivos inofensivos em qualquer rede residencial. Veja o padrão: resets limitados a um host e que crescem com sua taxa de requisições indicam que o host está bloqueando.

Devo desabilitar keep-alive para scraping?

Não completamente. Keep-alive economiza tempo quando você envia várias requisições ao mesmo host por uma saída fixa. Quando você quer um IP novo em cada requisição, uma nova conexão por requisição é a escolha mais limpa. Misturar ambos sem cuidado produz resets por conexão obsoleta.

Outros erros de proxy nesta referência

Códigos de status HTTP

Erros no navegador e cliente

Erros de conexão e TLS

Proxies residenciais com documentação que cobre os casos de falha

CrawlRelay proxies residenciais a partir de US$ 0,50/GB, tráfego que nunca expira.

A partir de US$ 0,50/GB · sem KYC

Comece agora