Slaptažodis su @ arba # gali sugadinti ranka sukurtą tarpinio serverio URL net tada, kai prisijungimo duomenys teisingi. Šie simboliai URL jau turi prasmę, todėl klientas gali dalį slaptažodžio perskaityti kaip serverio vardą arba fragmentą.

Abu prisijungimo duomenų laukus koduokite atskirai

Šis pavyzdys išsaugo URL struktūros skirtukus ir koduoja tik naudotojo vardą bei slaptažodį:

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"
)

Naudokite tikrąjį galinį tašką ir prisijungimo duomenis. Parodytas adresas yra dokumentacijos pavyzdys. Tuščias argumentas safe svarbus: quote paprastai palieka pasvirąjį brūkšnį neekranuotą, tačiau šiame prisijungimo lauke jį reikia koduoti.

Nekoduokite viso tarpinio serverio URL. Schemos skirtukų ir @ tarp prisijungimo duomenų bei serverio kodavimas suardo struktūrą, kurią norėjote išlaikyti. Venkite jau užkoduotą slaptažodį koduoti antrą kartą.

Rezultatą naudokite su Requests

import requests

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy_url, "https": proxy_url},
    timeout=(5, 15),
)
response.raise_for_status()

Jei užklausa vis tiek nesėkminga, patikrinkite, ar tarpinis serveris atmeta prisijungimą, ar klientas suklupo anksčiau, analizuodamas ar jungdamasis. 407 tapatybės nustatymo užklausa ir netinkamas URL yra skirtingi gedimai.

HTTPX gali laikyti tapatybės nustatymą atskirai

HTTPX Proxy objektas gali priimti galinį tašką ir prisijungimo duomenis kaip atskirus argumentus:

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()

Taip nereikia patiems konstruoti userinfo dalies. Tai nešifruoja prisijungimo duomenų nepriklausomai nuo ryšio su tarpiniu serveriu ir neparenka visų tarnybų palaikomo tapatybės nustatymo būdo.

Jei nemokamas sąrašas pateikia tik IP ir prievadą, šis pavyzdys nesuteikia numatytųjų prisijungimo duomenų. Tapatybės nustatymą naudokite tik kai operatorius tikrai suteikia paskyrą. URL su prisijungimo duomenimis nedėkite į bendrinamus žurnalus ir pirminio kodo failus.

Susiję straipsniai