Cara Menyiapkan Proxy Smartproxy di Linux dengan curl dan Python untuk Otomatisasi CLI
Arahkan lalu lintas curl dan Python melalui proxy residensial atau datacenter Smartproxy di Linux, verifikasi IP keluar Anda, sematkan sesi sticky, dan jadwalkan pemeriksaan berulang dengan cron atau systemd.
Ikhtisar
Tutorial ini menunjukkan cara mengirim lalu lintas baris perintah dan Python melalui proxy di Linux, termasuk autentikasi, verifikasi IP keluar, penyematan sesi, dan eksekusi terjadwal. Smartproxy digunakan di sini sebagai penyedia yang disarankan karena menawarkan proxy residensial dan datacenter melalui HTTP dan SOCKS5 dengan penagihan bulanan tetap dan kumpulan 65 juta+ IP, tetapi setiap langkah berfungsi dengan layanan proxy apa pun yang menyediakan protokol yang sama.
Pada akhir panduan ini Anda akan dapat:
- Melakukan autentikasi ke endpoint proxy dari shell dengan
curl - Memastikan bahwa lalu lintas keluar melalui IP proxy, bukan IP Anda sendiri
- Menggunakan endpoint yang sama dari Python dengan
requests - Menyematkan sesi sticky atau merotasi IP antarpemintaan
- Mengotomatiskan pemeriksaan kesehatan dengan cron atau timer systemd
Prasyarat
- Host Linux (perintah di bawah menggunakan Debian/Ubuntu; padanan untuk Fedora dan Arch dicatat)
curldan Python 3.8 atau lebih baru- Akun Smartproxy dengan paket aktif dan kredensial proxy
- Host dan port endpoint untuk produk yang ingin Anda gunakan, disalin dari dasbor di dalam akun Smartproxy Anda
- Akses keluar pada port proxy, dan tidak ada firewall perusahaan atau klien VPN yang memblokirnya
Langkah 1 — Pasang alat yang diperlukan
Pasang curl dan Python, lalu buat lingkungan terisolasi untuk klien Python.
sudo apt update
sudo apt install -y curl python3 python3-venv
Pada sistem berbasis Fedora atau RHEL gunakan:
sudo dnf install -y curl python3
Buat lingkungan virtual dan pasang klien HTTP plus dukungan SOCKS:
python3 -m venv ~/.venvs/proxy
source ~/.venvs/proxy/bin/activate
pip install --upgrade pip
pip install 'requests[socks]'
Ekstra requests[socks] menarik PySocks, yang membuat URL socks5h:// berfungsi di Python.
Langkah 2 — Simpan kredensial di luar skrip Anda
Menuliskan kredensial secara hard-code ke dalam skrip atau meng-commit-nya ke repositori adalah cara paling umum akun proxy bocor. Simpan di satu file dengan izin ketat dan muat hanya saat diperlukan.
install -d -m 700 ~/.config/smartproxy
install -m 600 /dev/null ~/.config/smartproxy/env
Buka file di editor Anda dan ganti setiap placeholder dengan nilai yang ditampilkan di dasbor penyedia Anda:
# ~/.config/smartproxy/env
# Replace every REPLACE_WITH_ value using the endpoint and credentials
# from your provider dashboard. Do not commit this file to version control.
export SP_PROXY_HOST="REPLACE_WITH_ENDPOINT_HOST"
export SP_PROXY_PORT_HTTP="REPLACE_WITH_HTTP_PORT"
export SP_PROXY_PORT_SOCKS5="REPLACE_WITH_SOCKS5_PORT"
export SP_PROXY_USER="REPLACE_WITH_PROXY_USERNAME"
export SP_PROXY_PASS="REPLACE_WITH_PROXY_PASSWORD"
Muat variabel ke shell Anda saat ini:
set -a; . ~/.config/smartproxy/env; set +a
Jika Anda menggunakan produk residensial dan datacenter, simpan pasangan variabel terpisah untuk masing-masing, karena biasanya host atau port-nya berbeda.
Langkah 3 — Pilih antara HTTP dan SOCKS5
Kedua protokol didukung oleh Smartproxy, dan pilihan yang tepat bergantung pada apa yang Anda kirim melalui tunnel.
| Jenis lalu lintas | Protokol yang disarankan | Alasan |
|---|---|---|
Permintaan HTTPS dari curl, requests, atau scraper |
Proxy HTTP (tunnel CONNECT) | Paling sederhana untuk dikonfigurasi, berfungsi dengan setiap klien HTTP, dan meneruskan nama host tujuan ke proxy |
| Lalu lintas non-HTTP seperti SSH, SMTP, atau klien TCP kustom | SOCKS5 | Agnostik protokol, meneruskan aliran TCP arbitrer |
| Alat yang tidak dapat menangani autentikasi proxy secara native | SOCKS5 | Kredensial ditangani oleh pustaka klien, bukan alat target |
| Kompatibilitas klien maksimum | HTTP | Didukung secara universal oleh pustaka HTTP dan sebagian besar alat CLI |
Jika Anda hanya mengambil URL HTTPS, mulai dengan HTTP dan beralih ke SOCKS5 hanya jika alat memerlukannya.
Langkah 4 — Uji koneksi dengan curl
Kirim permintaan melalui proxy HTTP dan cetak IP keluar yang dilihat tujuan:
curl -sS --max-time 30 \
--proxy "http://${SP_PROXY_HOST}:${SP_PROXY_PORT_HTTP}" \
--proxy-user "${SP_PROXY_USER}:${SP_PROXY_PASS}" \
'https://api.ipify.org?format=json'
Sekarang uji endpoint yang sama melalui SOCKS5. Varian --socks5-hostname menyelesaikan DNS di proxy, yang mencegah pencarian DNS lokal membocorkan lokasi asli Anda:
curl -sS --max-time 30 \
--socks5-hostname "${SP_PROXY_HOST}:${SP_PROXY_PORT_SOCKS5}" \
--proxy-user "${SP_PROXY_USER}:${SP_PROXY_PASS}" \
'https://api.ipify.org?format=json'
Bandingkan hasilnya dengan permintaan langsung yang melewati proxy sepenuhnya:
curl -sS 'https://api.ipify.org?format=json'
Jika IP melalui proxy berbeda dari IP langsung, lalu lintas keluar melalui proxy. Jalankan perintah melalui proxy beberapa kali untuk melihat apakah IP keluar berubah; itu memberi tahu Anda apakah Anda berada di endpoint berotasi atau sticky.
Langkah 5 — Sematkan sesi sticky atau rotasi pada setiap permintaan
Perilaku berotasi adalah default pada sebagian besar endpoint residensial: setiap koneksi baru dapat keluar melalui IP yang berbeda. Untuk login, formulir multi-langkah, atau alur bergaya checkout, Anda biasanya menginginkan IP yang sama untuk seluruh rangkaian permintaan.
Penyedia Anda membuat nama pengguna sticky dari token sesi. Tambahkan token ke nama pengguna proxy menggunakan pola persis yang ditunjukkan di generator sesi di dasbor Anda, yang umumnya terlihat seperti sufiks pada nama pengguna:
export SP_SESSION_ID="$(openssl rand -hex 4)"
export SP_SESSION_USER="${SP_PROXY_USER}-session-${SP_SESSION_ID}"
Lalu gantikan $SP_SESSION_USER di mana pun perintah di atas menggunakan $SP_PROXY_USER. Gunakan kembali token yang sama selama durasi tugas, dan buat token baru saat Anda menginginkan IP keluar yang baru.
| Tujuan | Pendekatan |
|---|---|
| Mengumpulkan banyak halaman independen | Nama pengguna berotasi default, satu permintaan per koneksi |
| Menjaga login atau keranjang tetap utuh | Gunakan kembali satu token sesi untuk seluruh alur kerja |
| Mendistribusikan beban ke suatu wilayah | Gunakan token sesi yang sama dengan negara atau kota tetap jika paket Anda menampilkan opsi tersebut di dasbor |
| Mengisolasi pekerja paralel | Beri setiap proses pekerja token sesi yang dibuat secara acak sendiri |
Langkah 6 — Gunakan proxy dari Python
Dengan file lingkungan dimuat, variabel yang sama tersedia untuk Python. Contoh ini menggunakan proxy HTTP untuk permintaan HTTPS:
import os
from urllib.parse import quote
import requests
host = os.environ['SP_PROXY_HOST']
port = os.environ['SP_PROXY_PORT_HTTP']
user = quote(os.environ['SP_PROXY_USER'], safe='')
password = quote(os.environ['SP_PROXY_PASS'], safe='')
proxies = {
'http': f'http://{user}:{password}@{host}:{port}',
'https': f'http://{user}:{password}@{host}:{port}',
}
response = requests.get(
'https://api.ipify.org?format=json',
proxies=proxies,
timeout=30,
)
response.raise_for_status()
print(response.json())
Untuk beralih ke SOCKS5, ubah hanya skema dan port. Skema socks5h melakukan resolusi DNS jarak jauh, sama dengan curl --socks5-hostname:
socks_port = os.environ['SP_PROXY_PORT_SOCKS5']
socks_proxies = {
'http': f'socks5h://{user}:{password}@{host}:{socks_port}',
'https': f'socks5h://{user}:{password}@{host}:{socks_port}',
}
Dua catatan praktis:
- Selalu tetapkan
timeouteksplisit. Jaringan proxy itu besar dan node keluar individual dapat lambat atau tidak tersedia, dan timeout yang tidak ditetapkan mengubah node buruk menjadi proses yang menggantung. - Lakukan percent-encode pada nama pengguna dan kata sandi, seperti yang ditunjukkan dengan
quote(), karena pembatas sesi dan karakter khusus merusak URL proxy jika diteruskan mentah.
Pembungkus percobaan ulang kecil membuat skrip jauh lebih tangguh:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
session.proxies.update(proxies)
session.mount('https://', HTTPAdapter(max_retries=Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
)))
Langkah 7 — Jalankan pemeriksaan sesuai jadwal
Simpan cuplikan verifikasi sebagai ~/scripts/check_proxy.py, lalu jadwalkan dengan cron agar masalah kredensial dan endpoint mati muncul lebih awal.
# Rotate a log of exit IPs every hour
0 * * * * set -a; . $HOME/.config/smartproxy/env; set +a; $HOME/.venvs/proxy/bin/python $HOME/scripts/check_proxy.py >> $HOME/proxy-check.log 2>&1
Tugas yang sama sebagai layanan dan timer systemd, yang lebih mudah dipantau dengan journalctl:
# ~/.config/systemd/user/proxy-check.service
[Unit]
Description=Verify proxy exit IP
[Service]
Type=oneshot
EnvironmentFile=%h/.config/smartproxy/env
ExecStart=%h/.venvs/proxy/bin/python %h/scripts/check_proxy.py
# ~/.config/systemd/user/proxy-check.timer
[Unit]
Description=Run the proxy check hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
Aktifkan dan jalankan dengan:
systemctl --user daemon-reload
systemctl --user enable --now proxy-check.timer
systemctl --user list-timers proxy-check.timer
Pemecahan Masalah
| Gejala | Kemungkinan penyebab | Perbaikan |
|---|---|---|
407 Proxy Authentication Required |
Nama pengguna atau kata sandi salah, atau karakter khusus tidak di-URL-encode | Salin ulang kredensial dari dasbor dan lakukan percent-encode dengan quote() di Python |
curl: (5) Could not resolve proxy |
Variabel host kosong atau salah eja | Jalankan echo "$SP_PROXY_HOST" dan muat ulang file env |
curl: (7) Failed to connect atau timeout |
Port diblokir oleh firewall, VPN, atau port yang salah untuk produk | Konfirmasi port di dasbor dan uji dengan nc -zv "$SP_PROXY_HOST" "$SP_PROXY_PORT_HTTP" |
curl: (56) CONNECT tunnel failed |
Node keluar memutus koneksi atau tujuan menolak permintaan | Coba lagi, dan kurangi konkurensi jika sering terjadi |
Permintaan berfungsi di browser tetapi gagal di curl melalui SOCKS5 |
Resolusi DNS lokal | Tambahkan --socks5-hostname alih-alih --socks5 |
Python memunculkan Missing dependencies for SOCKS support |
PySocks tidak terpasang | Aktifkan venv dan jalankan pip install 'requests[socks]' |
| IP keluar tidak pernah berubah | Anda menggunakan kembali token sesi sticky | Buat ID sesi baru untuk setiap pekerja |
| IP keluar sama dengan IP Anda sendiri | Variabel proxy tidak dimuat, atau alat melewati proxy | Muat ulang file env dan jalankan ulang perbandingan langsung vs melalui proxy |
Pemeriksaan tambahan yang layak dijalankan saat sesuatu berperilaku tidak terduga:
- Cetak variabel yang telah diselesaikan dengan
env | grep SP_PROXYuntuk menyingkirkan kesalahan cakupan shell. - Uji kedua protokol; jika SOCKS5 berfungsi dan HTTP tidak, masalahnya ada pada konfigurasi klien, bukan endpoint.
- Catat IP keluar bersama stempel waktu di keluaran tugas Anda sehingga Anda dapat mengorelasikan kegagalan dengan node tertentu.
Ringkasan
- Smartproxy menyediakan proxy residensial dan datacenter melalui HTTP dan SOCKS5 dengan penagihan bulanan tetap, yang menjadikannya penyedia yang disarankan yang wajar untuk alur kerja CLI dan pembuatan skrip.
- Simpan kredensial dalam file lingkungan
chmod 600dan muat denganset -a; . file; set +aalih-alih menyematkannya di skrip. - Gunakan proxy HTTP untuk perkakas khusus HTTPS dan
--socks5-hostnameatausocks5h://saat Anda memerlukan penerusan agnostik protokol atau resolusi DNS jarak jauh. - Verifikasi penyiapan dengan membandingkan permintaan melalui proxy dengan permintaan langsung; IP yang sama berarti proxy dilewati.
- Tambahkan token sesi ke nama pengguna untuk alur kerja sticky, dan buat token baru per pekerja untuk tugas berotasi paralel.
- Sambungkan pemeriksaan yang sama ke cron atau timer systemd agar kedaluwarsa kredensial dan endpoint mati diketahui sebelum proses produksi gagal.