Jawaban cepat
Apa arti Connection reset by peer (ECONNRESET) dengan proxy?
Connection reset by peer berarti sisi lain menutup koneksi TCP secara tiba-tiba dengan reset bukan penutupan normal. Melalui proxy residential CrawlRelay, penyebab biasa adalah koneksi keep-alive yang digunakan ulang tapi basi, exit yang terputus, atau firewall target yang memutus koneksi. Coba ulang permintaan aman pada koneksi baru dan jangan biarkan koneksi menganggur terlalu lama.
Connection reset by peer (ECONNRESET) sekilas
| Kesalahan | Connection reset by peer (ECONNRESET) |
|---|---|
| Tipe | Kesalahan socket |
| Dikirim oleh | Tumpukan jaringan, setelah sisi lainnya menutup koneksi secara tiba-tiba |
| Didefinisikan dalam | TCP reset (RST segment): RFC 9293 |
| Mencoba lagi? | Ya, untuk permintaan aman, pada koneksi baru |
| Periksa pertama | Lihat apakah reset mengikuti koneksi ulang yang menganggur atau yang baru |
Apa arti Connection reset by peer (ECONNRESET)?
TCP bisa mengakhiri koneksi dengan baik atau dengan reset. Reset memberitahu mesin Anda kalau sisi lain membuang koneksi, jadi data yang sedang dikirim hilang. Python menghasilkan ConnectionResetError; Node.js menghasilkan ECONNRESET atau 'socket hang up'.
'Peer' adalah siapa pun yang socket Anda ajak bicara langsung, yaitu gateway proxy. Reset masih bisa berasal dari jalur lebih jauh dan diteruskan.
Seperti apa a connection reset dalam Python, curl, Node.js, dan browser?
Kegagalan yang sama dicetak berbeda di setiap alat. Ini adalah pesan yang perlu dicari di log Anda:
- Python:
ConnectionResetError: [Errno 104] Connection reset by peer, atau[WinError 10054]di Windows - requests:
ConnectionError(ProtocolError('Connection aborted.', ConnectionResetError(...))) - Node.js:
Error: socket hang upatauread ECONNRESET - curl:
curl: (56) Recv failure: Connection reset by peer
Apa penyebab a connection reset?
Kemungkinan besar pertama:
- Koneksi keep-alive basi. Koneksi dalam pool menganggur dan ditutup di sisi lain; permintaan berikutnya langsung gagal.
- Exit yang jatuh, yang memutus semua koneksi yang menggunakannya.
- Firewall target yang mereset koneksi yang tidak disukainya.
- Unggahan atau unduhan lama yang diputus oleh batas waktu idle di sepanjang jalur.
Bagaimana cara mendiagnosis a connection reset langkah demi langkah?
- Periksa apakah reset terjadi pada permintaan pertama koneksi atau setelah pemakaian ulang yang menganggur.
- Hitung reset per host: satu host berarti target; semua host berarti jalur atau pool.
- Catat waktu: reset setelah N detik menganggur menunjukkan batas waktu idle.
# 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_URLBagaimana cara memperbaiki a connection reset?
- Ulang permintaan idempoten (GET, HEAD) sekali pada koneksi baru.
- Perpendek pemakaian ulang koneksi menganggur: tutup koneksi pooled yang menganggur lebih dari beberapa detik, atau buka koneksi baru per permintaan saat Anda butuh IP baru.
- Akhiri sesi sticky yang sering reset dan mulai sesi baru.
- Perlambat pada host yang sering reset saat beban tinggi.
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))Haruskah saya mencoba lagi setelah a connection reset?
Ulangi reset sekali untuk permintaan aman seperti GET. Jangan ulangi sembarangan POST yang mengubah data: yang pertama bisa saja sudah diproses. Lonjakan reset dalam satu host berarti host itu memutus Anda; turunkan kecepatan di sana.
Bagaimana Connection reset by peer (ECONNRESET) berlaku untuk CrawlRelay?
Di CrawlRelay, rotasi terjadi per koneksi baru. Klien yang menjaga satu koneksi tetap hidup memakai exit yang sama untuk tiap permintaan, jadi exit yang jatuh mereset koneksi itu. Buka kembali koneksi untuk mendapatkan exit segar; panduan sesi menunjukkan polanya.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS melalui CONNECT) dan port 7778 (SOCKS5). Format username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Terkait: 502 Bad Gateway · Read timed out · Sessions guide.
Connection reset by peer (ECONNRESET): pertanyaan yang sering ditanyakan pengembang
Mengapa saya mendapatkan 'socket hang up' di Node.js dengan proxy?
Koneksi tertutup sebelum respons tiba. Dengan proxy, penyebab umum adalah socket keep-alive yang digunakan ulang tapi basi, exit yang terputus, atau target yang memutus koneksi. Ulangi permintaan GET pada socket baru dan batasi berapa lama socket menganggur di pool.
Apakah connection reset tanda saya diblokir?
Kadang-kadang. Firewall dapat mereset koneksi dari klien yang mereka tolak, tetapi reset juga terjadi karena alasan tidak berbahaya di jaringan residential mana pun. Lihat polanya: reset terbatas pada satu host dan meningkat dengan laju permintaan Anda menunjukkan host tersebut menolak.
Haruskah saya menonaktifkan keep-alive untuk scraping?
Tidak sepenuhnya. Keep-alive menghemat waktu saat Anda mengirim beberapa permintaan ke host sama melalui exit sticky yang sama. Saat Anda ingin IP baru pada setiap permintaan, koneksi baru per permintaan adalah pilihan yang lebih bersih. Mencampur keduanya sembarangan menghasilkan reset koneksi basi.
Kesalahan proxy lain dalam referensi ini
Kode status HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Kesalahan browser dan klien
Error koneksi dan TLS
Proxy residensial dengan dokumentasi yang membahas kasus kegagalan
Proxy residensial CrawlRelay dari US$0,50/GB, lalu lintas yang tidak pernah kedaluwarsa.