Proxy Tidak Mendukung Protokol yang Diperlukan: Apa yang Harus Dilakukan
Anda telah mengonfigurasi proxy, menjalankan skrip — dan mendapatkan kesalahan "Protocol not supported" atau "Connection refused". Masalah ketidakcocokan protokol lebih sering terjadi daripada yang dibayangkan. Mari kita bahas mengapa ini terjadi dan bagaimana menyelesaikan masalah tanpa mengganti penyedia layanan.
Protokol yang Digunakan Proxy
Sebelum menyelesaikan masalah, penting untuk memahami perbedaan antara protokol-protokol tersebut. Masing-masing memiliki area aplikasi dan batasan tersendiri.
| Protokol | Port Default | Fitur Utama |
|---|---|---|
| HTTP | 80, 8080, 3128 | Hanya lalu lintas HTTP, dapat memodifikasi header |
| HTTPS (CONNECT) | 443, 8443 | Tunneling melalui HTTP CONNECT, enkripsi |
| SOCKS4 | 1080 | Koneksi TCP, tanpa otentikasi, tanpa UDP |
| SOCKS5 | 1080, 1081 | TCP dan UDP, otentikasi, DNS melalui proxy |
Konflik Umum:
- Selenium dan Puppeteer memerlukan HTTP/HTTPS, padahal Anda memiliki SOCKS5
- Bot Telegram berjalan melalui SOCKS5, tetapi proxy hanya mendukung HTTP
- Klien Torrent memerlukan SOCKS5 dengan UDP, tetapi proxy adalah SOCKS4
- Aplikasi game memerlukan UDP, tetapi proxy HTTP tidak mendukungnya
Diagnosis: Menentukan Protokol Proxy
Jika penyedia layanan tidak secara eksplisit menyebutkan protokol atau Anda ragu, uji proxy secara mandiri.
Pengujian melalui curl
Menguji protokol HTTP:
# Proxy HTTP
curl -x http://proxy_ip:port http://httpbin.org/ip
# Dengan otentikasi
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip
Menguji SOCKS5:
# Proxy SOCKS5
curl -x socks5://proxy_ip:port http://httpbin.org/ip
# SOCKS5 dengan DNS melalui proxy (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip
Jika perintah mengembalikan alamat IP proxy, protokol telah terdeteksi dengan benar. Kesalahan seperti Connection refused atau Unsupported proxy berarti protokolnya salah.
Pengujian melalui Python
import requests
proxy_ip = "proxy_ip:port"
# Uji HTTP
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"http://{proxy_ip}"},
timeout=10)
print(f"HTTP berfungsi: {r.json()}")
except Exception as e:
print(f"HTTP tidak berfungsi: {e}")
# Uji SOCKS5 (memerlukan pip install requests[socks])
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"socks5://{proxy_ip}"},
timeout=10)
print(f"SOCKS5 berfungsi: {r.json()}")
except Exception as e:
print(f"SOCKS5 tidak berfungsi: {e}")
Deteksi Otomatis
Skrip untuk mengulang protokol:
import requests
def detect_protocol(proxy_address):
protocols = ["http", "https", "socks4", "socks5", "socks5h"]
for proto in protocols:
try:
proxies = {
"http": f"{proto}://{proxy_address}",
"https": f"{proto}://{proxy_address}"
}
r = requests.get("http://httpbin.org/ip",
proxies=proxies, timeout=5)
if r.status_code == 200:
return proto
except:
continue
return None
result = detect_protocol("proxy_ip:port")
print(f"Protokol terdeteksi: {result}")
Konversi HTTP ke SOCKS dan Sebaliknya
Jika proxy mendukung protokol yang salah untuk perangkat lunak Anda, gunakan konverter lokal.
Privoxy: HTTP → SOCKS
Privoxy menerima permintaan HTTP dan meneruskannya melalui proxy SOCKS.
Instalasi:
# Ubuntu/Debian
sudo apt install privoxy
# macOS
brew install privoxy
# Windows — unduh dari situs resmi
Konfigurasi (file /etc/privoxy/config):
# Mendengarkan di port lokal 8118 (HTTP)
listen-address 127.0.0.1:8118
# Meneruskan melalui SOCKS5 eksternal
forward-socks5 / socks_proxy_ip:1080 .
# Dengan otentikasi
forward-socks5 / user:pass@socks_proxy_ip:1080 .
Sekarang perangkat lunak Anda terhubung ke 127.0.0.1:8118 melalui HTTP, dan lalu lintas diteruskan melalui SOCKS5.
Gost: Konverter Universal
Gost adalah alat canggih untuk semua jenis transformasi protokol.
# Proxy HTTP di input → SOCKS5 di output
gost -L http://:8080 -F socks5://socks_proxy_ip:1080
# SOCKS5 di input → HTTP di output
gost -L socks5://:1080 -F http://http_proxy_ip:8080
# Dengan otentikasi di kedua ujung
gost -L http://local_user:local_pass@:8080 \
-F socks5://remote_user:remote_pass@proxy_ip:1080
Konverter Python
Konverter minimalis untuk tugas sederhana:
# pip install pproxy
# HTTP di input, SOCKS5 di output
pproxy -l http://:8080 -r socks5://proxy_ip:1080
# SOCKS5 di input, HTTP di output
pproxy -l socks5://:1080 -r http://proxy_ip:8080
Pengaturan Terowongan Lokal
Terkadang konversi tidak cukup — diperlukan terowongan yang lengkap.
Terowongan SSH melalui Proxy HTTP
Jika Anda memiliki server SSH dan proxy HTTP, Anda dapat membuat SOCKS5:
# Membuat SOCKS5 di localhost:1080 melalui proxy HTTP
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server
Stunnel untuk HTTPS
Jika Anda memerlukan proxy HTTPS, tetapi hanya memiliki HTTP:
# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443
Mengonfigurasi Perangkat Lunak untuk Protokol yang Tersedia
Terkadang lebih mudah mengonfigurasi perangkat lunak agar sesuai dengan protokol yang tersedia daripada mengonversi protokol.
Selenium dengan Protokol Berbeda
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Proxy HTTP (cara standar)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')
# Proxy SOCKS5
options.add_argument('--proxy-server=socks5://proxy_ip:1080')
# Untuk Firefox dengan SOCKS5
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)
aiohttp dengan SOCKS
# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector
async def fetch_with_socks():
connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('http://httpbin.org/ip') as response:
return await response.json()
Bot Telegram melalui HTTP
Jika pustaka Telegram memerlukan SOCKS5, tetapi Anda memiliki HTTP:
# python-telegram-bot dengan proxy HTTP
from telegram.ext import ApplicationBuilder
application = (
ApplicationBuilder()
.token("YOUR_TOKEN")
.proxy_url("http://proxy_ip:8080") # Berfungsi dengan HTTP
.build()
)
Saran: Banyak pustaka modern mendukung kedua protokol. Periksa dokumentasi — mungkin cukup mengubah skema URL dari
socks5://menjadihttp://.
Cara Memilih Proxy dengan Protokol yang Tepat
Untuk menghindari masalah protokol, tentukan persyaratan Anda terlebih dahulu.
Matriks Kompatibilitas
| Tugas | Protokol yang Direkomendasikan | Alasan |
|---|---|---|
| Web Scraping | HTTP/HTTPS | Dukungan luas, pengaturan mudah |
| Otomatisasi Browser | HTTP atau SOCKS5 | Tergantung pada browser dan framework |
| Bot Telegram, Discord | SOCKS5 | Persyaratan pustaka |
| Torrent | SOCKS5 dengan UDP | DHT dan PEX menggunakan UDP |
| Game, VoIP | SOCKS5 dengan UDP | Latensi rendah, lalu lintas UDP |
| Permintaan API | HTTP/HTTPS | REST API berjalan melalui HTTP |
Hal yang Perlu Diperhatikan Saat Memilih Penyedia
- Daftar Protokol yang Didukung — Harus disebutkan secara eksplisit
- Kemampuan Beralih — Beberapa penyedia mengizinkan akses IP yang sama melalui port/protokol yang berbeda
- Dukungan UDP untuk SOCKS5 — Tidak semua proxy SOCKS5 mendukung UDP
- Dokumentasi Pengaturan — Contoh untuk berbagai bahasa dan alat
Proxy residensial biasanya mendukung HTTP/HTTPS dan SOCKS5 secara bersamaan, yang menghilangkan sebagian besar masalah kompatibilitas. Proxy pusat data lebih sering terbatas pada HTTP/HTTPS.
Daftar Periksa Sebelum Membeli
- Tentukan protokol apa yang dibutuhkan oleh perangkat lunak Anda
- Periksa apakah UDP diperlukan (game, torrent, VoIP)
- Tanyakan kepada penyedia tentang dukungan protokol yang diperlukan
- Minta akses uji coba untuk memverifikasi kompatibilitas
- Siapkan rencana cadangan — konverter lokal
Kesimpulan
Ketidakcocokan protokol adalah masalah yang dapat diatasi. Dalam kebanyakan kasus, konverter lokal seperti Privoxy atau Gost sudah cukup. Untuk proyek jangka panjang, lebih menguntungkan untuk segera memilih proxy yang mendukung protokol yang diperlukan.
Untuk tugas yang memerlukan fleksibilitas dalam pemilihan protokol, proxy residensial dengan akses multiprotokol adalah pilihan yang baik — pelajari lebih lanjut di proxycove.com.