Erikoismerkit välityspalvelimen salasanoissa
Koodaa välityspalvelimen käyttäjänimi ja salasana erikseen, jotta @, kaksoispisteet, vinoviivat ja # eivät riko URL-osoitetta.
@- tai #-merkin sisältävä salasana voi rikkoa käsin rakennetun välityspalvelin-URL:n, vaikka tunnukset olisivat oikein. Merkeillä on jo merkitys URL:ssa, joten asiakas voi tulkita osan salasanasta palvelinnimeksi tai fragmentiksi.
Koodaa kaksi tunnustietokenttää erikseen
Tämä esimerkki säilyttää URL:n rakenteelliset erotinmerkit ja koodaa vain käyttäjänimen ja salasanan:
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"
)
Käytä todellista päätepistettäsi ja tunnuksiasi. Näytetty osoite on dokumentaatioesimerkki. Tyhjä safe-argumentti on tärkeä: quote jättää tavallisesti vinoviivan suojaamatta, mutta tässä tunnustietokentässä vinoviiva pitää koodata.
Älä koodaa koko välityspalvelin-URL:ää. Skeeman erotinten sekä tunnusten ja palvelimen välisen @-merkin koodaaminen tuhoaa rakenteen, jonka halusit säilyttää. Älä myöskään koodaa jo koodattua salasanaa uudelleen.
Käytä tulosta Requestsin kanssa
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Jos pyyntö yhä epäonnistuu, selvitä, torjuuko välityspalvelin kirjautumisen vai epäonnistuiko asiakas jo aiemmin jäsentäessään tai yhdistäessään. 407-todennushaaste ja virheellinen URL ovat eri virheitä.
HTTPX voi pitää todennuksen erillään
HTTPX:n Proxy-olio voi saada päätepisteen ja tunnukset erillisinä argumentteina:
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()
Tällöin userinfo-osaa ei tarvitse rakentaa itse. Se ei salaa tunnuksia välityspalvelinyhteydestä riippumatta eikä valitse kaikkien palvelujen tukemaa todennusmenetelmää.
Jos ilmainen luettelo antaa vain IP:n ja portin, tämä esimerkki ei tarjoa oletustunnuksia. Käytä todennusta vain, kun ylläpitäjä todella antaa tilin. Älä tallenna tunnuksia sisältäviä URL-osoitteita jaettuihin lokeihin tai lähdetiedostoihin.