Cara mendiagnosis penyebab tingkat kesuksesan rendah: panduan langkah demi langkah
Tingkat kesuksesan adalah persentase permintaan yang berhasil dari total jumlah percobaan. Ketika indikator ini turun di bawah normal, uang, waktu, dan data hilang. Namun penyebabnya bisa puluhan: dari konfigurasi yang salah hingga pemblokiran server target. Dalam artikel ini, kami akan membahas pendekatan sistematis untuk diagnosis dan menemukan solusinya.
Apa itu tingkat kesuksesan dan berapa normanya
Tingkat kesuksesan (SR) = (Permintaan berhasil / Total jumlah permintaan) × 100%
Nilai normal tergantung pada jenis tugas:
| Tugas | SR Normal | Tingkat Kritis |
|---|---|---|
| Parsing data publik | 95–99% | di bawah 85% |
| Otomasi SMM | 90–97% | di bawah 80% |
| Verifikasi iklan | 98–99.5% | di bawah 95% |
| Integrasi API | 99–99.9% | di bawah 98% |
Jika SR turun 5–10% dari garis dasar Anda — ini adalah sinyal untuk diagnosis. Jika turun 20%+ — tindakan mendesak diperlukan.
Langkah pertama diagnosis
Langkah 1: Periksa log dan metrik
Kumpulkan data untuk 24–72 jam terakhir:
- Kapan tepatnya SR turun? (waktu yang tepat)
- Berapa persen permintaan yang mengembalikan kesalahan 407 (Proxy Authentication Required)?
- Berapa persen — 429 (Terlalu Banyak Permintaan)?
- Berapa persen — timeout (connection timeout)?
- Apakah beban berubah (RPS — permintaan per detik)?
Langkah 2: Uji secara terisolasi
Gunakan skrip sederhana untuk memeriksa proxy tanpa aplikasi Anda:
import requests
import time
proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"
success = 0
failed = 0
for i in range(100):
try:
response = requests.get(
target_url,
proxies=proxies,
timeout=10,
verify=False
)
if response.status_code == 200:
success += 1
print(f"✓ Percobaan {i+1}: berhasil")
else:
failed += 1
print(f"✗ Percobaan {i+1}: status {response.status_code}")
except Exception as e:
failed += 1
print(f"✗ Percobaan {i+1}: {str(e)}")
time.sleep(0.5)
sr = (success / (success + failed)) * 100
print(f"\nTingkat Kesuksesan: {sr:.1f}%")
print(f"Berhasil: {success}, Kesalahan: {failed}")
Jika tes ini menunjukkan SR normal — masalahnya ada di kode atau konfigurasi Anda. Jika SR rendah bahkan di sini — masalahnya ada di proxy atau server target.
Masalah dari sisi proxy
Kesalahan 407: Autentikasi Proxy Diperlukan
Penyebab:
- Kredensial salah (login/password)
- Akun telah kadaluarsa
- Alamat IP tidak dalam daftar putih (jika diperlukan)
- Rotasi IP tidak berfungsi atau dinonaktifkan
Solusi:
import requests
# Format yang benar untuk proxy residensial
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}
# Tes
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)
Kelebihan beban server proxy
Jika semua pengguna layanan mengirim sejumlah besar permintaan secara bersamaan, mungkin ada batasan RPS (permintaan per detik). Ini jarang terjadi, tetapi bisa terjadi.
Periksa:
- RPS saat ini Anda pada puncaknya
- Batas tarif Anda
- Apakah ada kesalahan 429 di log
Solusi: tambahkan penundaan antar permintaan atau tingkatkan paket Anda.
Kualitas alamat IP
Untuk proxy residensial SR rendah dapat berarti Anda dirotasi dengan alamat yang diblokir. Periksa:
- Berapa persen alamat IP yang mengembalikan 403 Forbidden?
- Apakah alamat yang sama berulang?
- Apakah ada pola — satu negara/wilayah bekerja, yang lain tidak?
Pemblokiran dan filter server target
Kesalahan 429: Terlalu Banyak Permintaan
Server target melihat terlalu banyak permintaan dari satu IP atau secara keseluruhan. Solusi:
- Tambahkan penundaan: `time.sleep(random.uniform(1, 3))`
- Gunakan rotasi IP: setiap permintaan — IP baru
- Kurangi RPS: kirim permintaan secara berurutan, bukan paralel
- Tambahkan header realistis: User-Agent, Referer, Accept-Language
Kesalahan 403 Forbidden
Server telah memblokir IP Anda (atau IP proxy). Ini bisa:
- Filter berdasarkan geolokasi
- Daftar hitam layanan proxy
- Detektor bot (JavaScript, CAPTCHA)
Solusi: gunakan proxy mobile atau proxy residensial dengan rotasi. Mereka lebih sulit untuk diblokir.
Kesalahan 403: Pemeriksaan User-Agent
Beberapa layanan menolak permintaan dengan User-Agent yang mencurigakan:
import requests
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]
headers = {
"User-Agent": random.choice(user_agents),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
"Referer": "https://google.com"
}
response = requests.get(
"https://target-site.com",
headers=headers,
proxies={"http": proxy, "https": proxy},
timeout=10
)
print(response.status_code)
Kesalahan dalam kode klien
Penanganan pengecualian yang tidak benar
Kesalahan umum: kode menganggap kesalahan koneksi sebagai permintaan yang gagal, tetapi tidak mencoba untuk terhubung kembali:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Cara yang benar dengan retries
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
print(f"Kesalahan: {e}")
# Catat dan lanjutkan ke permintaan berikutnya
Timeout yang tidak benar
Jika timeout terlalu pendek (1–2 detik), proxy yang lambat akan ditolak:
- Untuk parsing biasa: 10–30 detik
- Untuk proxy mobile: 15–45 detik
- Untuk API: 5–10 detik
Kesalahan SSL/TLS
Jika Anda menggunakan `verify=False`, ini dapat menyembunyikan masalah nyata. Lebih baik perbarui sertifikat:
import requests
import certifi
# Benar
response = requests.get(
url,
proxies=proxies,
verify=certifi.where(), # Bukan verify=False
timeout=15
)
Masalah jaringan dan timeout
Connection timeout vs Read timeout
Perbedaannya penting:
- Connection timeout: proxy tidak merespons (masalah dengan proxy atau jaringan)
- Read timeout: server target mengirim data dengan lambat (masalah server target)
import requests
# timeout = (connection_timeout, read_timeout)
try:
response = requests.get(
url,
proxies=proxies,
timeout=(5, 15) # 5 detik untuk koneksi, 15 untuk membaca
)
except requests.exceptions.ConnectTimeout:
print("Proxy tidak merespons")
except requests.exceptions.ReadTimeout:
print("Server target lambat")
Masalah DNS
Jika server target tidak terselesaikan, ini bukan kesalahan proxy:
import socket
# Periksa DNS di luar proxy
try:
ip = socket.gethostbyname("target-site.com")
print(f"Terselesaikan: {ip}")
except socket.gaierror:
print("Kesalahan DNS — situs tidak ditemukan")
Daftar periksa diagnosis SR rendah
- Tetapkan garis dasar: berapa SR yang normal sebelumnya?
- Jalankan tes terisolasi (skrip di atas) dengan 100 permintaan
- Periksa log: kode HTTP mana yang mendominasi? (407, 429, 403, timeout?)
- Jika 407: periksa login/password dan daftar putih IP
- Jika 429: tambahkan penundaan antar permintaan, gunakan rotasi IP
- Jika 403: periksa User-Agent, Referer, tambahkan header realistis
- Jika timeout: tingkatkan timeout, periksa RPS, gunakan logika retry
- Periksa kode Anda: penanganan pengecualian yang benar, timeout yang benar
- Periksa server target: apakah dapat diakses secara langsung (tanpa proxy)?
- Jika semua yang lain gagal: coba jenis proxy lain atau penyedia lain
Tabel diagnosis cepat
| Kode HTTP | Kemungkinan Penyebab | Solusi |
|---|---|---|
| 407 | Kredensial proxy salah | Periksa login/password, daftar putih IP |
| 429 | Terlalu banyak permintaan | Tambahkan penundaan, gunakan rotasi IP |
| 403 | IP diblokir atau detektor bot | Tambahkan header realistis, gunakan proxy mobile |
| Timeout | Proxy lambat atau server target kelebihan beban | Tingkatkan timeout, periksa RPS |
| Connection refused | Server proxy tidak dapat diakses | Periksa IP:port, status proxy |
Kesimpulan
Tingkat kesuksesan rendah adalah gejala, bukan penyakit. Penyebabnya bisa banyak: dari kesalahan ketik dalam kode hingga pemblokiran oleh server target. Diagnosis sistematis adalah kunci untuk solusi:
- Periksa metrik dan log
- Isolasi masalah (proxy vs server target vs kode Anda)
- Tentukan jenis kesalahan (407, 429, 403, timeout)
- Terapkan solusi yang sesuai
Untuk tugas yang memerlukan keandalan dan SR tinggi, proxy residensial dengan rotasi IP direkomendasikan. Mereka lebih sulit untuk dideteksi dan lebih stabil. Coba tes gratis di proxycove.com dan uji pada tugas Anda.