Kata laluan dengan @ atau # boleh merosakkan URL proksi yang dibina sendiri walaupun bukti kelayakan betul. Aksara itu sudah mempunyai makna dalam URL, jadi klien mungkin mentafsir sebahagian kata laluan sebagai nama hos atau fragmen.

Kodkan dua medan bukti kelayakan secara berasingan

Contoh ini mengekalkan pemisah struktur URL dan hanya mengekodkan nama pengguna serta kata laluan:

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 titik akhir dan bukti kelayakan sebenar anda. Alamat yang dipaparkan ialah contoh dokumentasi. Argumen safe kosong itu penting: quote biasanya membiarkan garis miring tanpa pelarian, tetapi garis miring dalam medan ini perlu dikodkan.

Jangan kodkan seluruh URL proksi. Mengekodkan pemisah skema dan @ antara bukti kelayakan dengan hos merosakkan struktur yang mahu dikekalkan. Elakkan juga mengekodkan kata laluan yang sudah dikodkan untuk kali kedua.

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 masih gagal, periksa sama ada proksi menolak log masuk atau klien gagal lebih awal semasa menghuraikan atau menyambung. Cabaran pengesahan 407 dan URL tidak sah ialah kegagalan yang berbeza.

HTTPX boleh mengasingkan pengesahan

Objek Proxy HTTPX boleh menerima titik akhir dan bukti kelayakan sebagai argumen berasingan:

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 mengelakkan pembinaan bahagian userinfo sendiri. Ia tidak menyulitkan bukti kelayakan secara bebas daripada sambungan proksi atau memilih kaedah pengesahan yang disokong semua perkhidmatan.

Jika senarai percuma hanya memberikan IP dan port, contoh ini tidak menyediakan bukti kelayakan lalai. Gunakan pengesahan hanya apabila pengendali benar-benar memberikan akaun. Jangan letakkan URL yang mengandungi bukti kelayakan dalam log dikongsi dan fail sumber.

Artikel berkaitan