Karakter Khusus dalam Kata Sandi Proksi
Enkode nama pengguna dan kata sandi proksi secara terpisah agar @, titik dua, garis miring, dan # tidak merusak URL.
Kata sandi yang mengandung @ atau # dapat merusak URL proksi yang dirangkai manual meskipun kredensial benar. Karakter tersebut sudah memiliki arti dalam URL, sehingga klien bisa menafsirkan sebagian kata sandi sebagai nama host atau fragmen.
Enkode kedua kolom kredensial secara terpisah
Contoh ini mempertahankan pemisah struktural URL dan hanya mengenkode nama pengguna serta kata sandi:
from urllib.parse import quote
username = "user@team"
password = "p:a/ss#?"
proxy_url = (
"http://"
+ quote(username, safe="")
+ ":"
+ quote(password, safe="")
+ "@203.0.113.10:8080"
)
Gunakan endpoint dan kredensial Anda yang sebenarnya. Alamat yang ditampilkan adalah contoh dokumentasi. Argumen safe kosong itu penting: quote biasanya membiarkan garis miring tanpa escape, tetapi garis miring dalam kolom kredensial ini harus dienkode.
Jangan mengenkode seluruh URL proksi. Mengenkode pemisah skema dan @ antara kredensial dan host merusak struktur yang ingin dipertahankan. Hindari pula mengenkode kata sandi yang sudah dienkode untuk kedua kalinya.
Gunakan hasilnya dengan Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Jika permintaan tetap gagal, periksa apakah proksi menolak login atau klien gagal lebih dahulu saat parsing atau menghubungkan. Tantangan autentikasi 407 dan URL tidak valid adalah kegagalan berbeda.
HTTPX dapat memisahkan autentikasi
Objek Proxy HTTPX dapat menerima endpoint dan kredensial sebagai argumen terpisah:
import httpx
proxy = httpx.Proxy(
"http://203.0.113.10:8080",
auth=("user@team", "p:a/ss#?"),
)
with httpx.Client(proxy=proxy, trust_env=False, timeout=15) as client:
response = client.get("https://example.com/")
response.raise_for_status()
Ini menghindari penyusunan bagian userinfo sendiri. Ini tidak mengenkripsi kredensial secara terpisah dari koneksi proksi atau memilih metode autentikasi yang didukung semua layanan.
Jika daftar gratis hanya memberikan IP dan porta, contoh ini tidak menyediakan kredensial bawaan. Gunakan autentikasi hanya jika operator benar-benar memberikan akun. Jangan masukkan URL berisi kredensial ke log bersama dan berkas sumber.