Als Requests beschikbaar is in je project, geef je een proxymapping aan de aanroep mee:

import requests

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
    timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)

Vervang het loopback-eindpunt door je actieve proxy of een kandidaat uit de lijst met HTTP-proxy’s die je met deze aanvraag gaat testen. De sleutels beschrijven de bestemmingsschema’s: http voor HTTP-URL’s en https voor HTTPS-URL’s. De waarden beschrijven de proxylistener. Het kunnen verschillende eindpunten zijn als je netwerk aparte routes vereist.

Een proxywaarde met http:// onder de sleutel https is bewust gekozen. Requests vraagt de HTTP-listener om een CONNECT-tunnel en zet daarna TLS met de bestemming op door die tunnel, onder het bestemmings- en poortbeleid van de proxy. De waarde veranderen in https:// vraagt om TLS naar de proxy zelf; dat kan mislukken als de listener onversleuteld HTTP verwacht.

Wat de twee time-outgetallen betekenen

timeout=(5, 15) stelt verbindings- en leestime-outs in. Het legt geen totale deadline van vijftien seconden op. Regelmatig binnenkomende gegevens, meerdere adressen en verbindingspogingen kunnen de totale duur verlengen. Requests geeft geen algemene time-out als je de instelling weglaat. Kies dus grenzen die bij de respons passen en voeg een deadline op toepassingsniveau toe als de taak een strikt totaalbudget vereist.

Behandel de fout in de fase waarin die optreedt

try:
    response = requests.get(
        "https://example.com/",
        proxies=proxies,
        timeout=(5, 15),
    )
    response.raise_for_status()
except requests.exceptions.ProxyError as error:
    print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
    print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
    print("HTTP status:", error.response.status_code)

Een geweigerde CONNECT kan ProxyError veroorzaken voordat er een bestemmingsantwoord is. De tak HTTPError volgt op een ontvangen antwoord met foutstatus; Timeout betekent dat een ingestelde limiet is verstreken. Onderzoek de uitzonderingsketens van de verbindingsopbouw lokaal en verwijder eindpunten met inloggegevens en privé-URL’s voordat je ze deelt.

Laat certificaatcontrole ingeschakeld. Gebruikt het bevoegde netwerk een private CA of beheerde onderschepping, lever dan het verwachte vertrouwensmateriaal aan in plaats van controle uit te schakelen.

Expliciete vermeldingen per aanvraag bepalen de hier opgegeven routes, maar weggelaten schema’s kunnen nog steeds worden beïnvloed door proxyherkenning uit de omgeving. Wanneer je de aanroep in een herbruikbare Session onderbrengt, bepaal je hoe omgevingsvariabelen, Session-standaarden en overschrijvingen per aanvraag moeten samenwerken. Hergebruik van verbindingen en routeringsbeleid zijn afzonderlijke keuzes.

Gerelateerde artikelen