Gee 'n leë kartering aan ProxyHandler wanneer een urllib-opener direk moet verbind:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Die leë woordeboek verskaf geen instaanbedienerroetes nie. As jy die kartering weglaat, ontdek die hanteerder eerder instaanbedieners uit sy omgewing en platforminstellings. Hierdie twee konstruksies druk verskillende beleide uit.

Die voorbeeld gebruik Python se standaardbiblioteek en behou normale HTTPS-verifikasie. Die with-blok sluit die antwoord, ook wanneer 'n uitsondering die blok verlaat.

Direkte versoeke en versoeke deur 'n instaanbediener in dieselfde toepassing

Twee openers kan die twee beleide dra sonder om omgewingsveranderlikes tussen oproepe te verander:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Vervang die teruglusadres met jou HTTP-instaanbediener, of kies 'n kandidaat uit die HTTP-instaanbedienerlys vir die vergelyking deur 'n instaanbediener. Dit kan die HTTPS-teiken deur CONNECT bereik wanneer die diens dit toelaat. Die luisterpunt se protokol en verifikasieondersteuning moet by die hanteerder pas.

Laat die verstekopener met rus

Roep direct.open of proxied.open deur die objek aan wat die roete beheer. install_opener verander die proseswye verstek wat urllib se geriefsfunksies gebruik; 'n biblioteek wat dit gebruik, kan dus onverwante kode beïnvloed. Dit is onnodig vir die afgesonderde opener hier bo.

Die timeout-argument is 'n instelling vir 'n bewerking, nie 'n volledige verstreke-tydlimiet vir elke oordrag nie. Lees slegs die data wat die taak benodig en gebruik 'n sperdatum op 'n hoër vlak as die taak 'n streng totale tydsbegroting het.

Hierdie opener-objekte verander nie 'n ander biblioteek se kliënt, 'n bestaande proses of 'n blaaier se instaanbedienerinstellings nie.

Verwante artikels