Python urllib: I-disable ang mga Proxy para sa Isang Opener
Gumawa ng direktang kumokonektang urllib opener gamit ang ProxyHandler({}) nang hindi binabago ang ibang client o ang environment ng proseso.
Magpasa ng walang-lamang mapping sa ProxyHandler kapag isang urllib opener ang dapat direktang kumonekta:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Walang proxy route na ibinibigay ang walang-lamang dictionary. Kapag hindi ibinigay ang mapping, hinahayaan nitong tuklasin ng handler ang mga proxy mula sa environment at mga setting ng platform. Magkaibang patakaran ang ipinapahayag ng dalawang paraan ng pagbuo.
Gumagamit ang halimbawa ng standard library ng Python at pinananatili ang normal na HTTPS verification. Isinasara ng with block ang response, kahit kapag may exception na nagdulot ng paglabas sa block.
Direkta at naka-proxy na mga request sa iisang application
Maaaring katawanin ng dalawang opener ang dalawang patakaran nang hindi nagbabago ng environment variable sa pagitan ng mga tawag:
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)
Palitan ang loopback address ng iyong HTTP proxy, o pumili ng kandidato mula sa listahan ng mga HTTP proxy para sa paghahambing gamit ang proxy. Kaya nitong dalhin ang koneksyon sa HTTPS na target sa pamamagitan ng CONNECT kung pinapayagan ng serbisyo. Dapat tumugma sa handler ang protocol at suporta sa authentication ng listener.
Huwag baguhin ang default na opener
Tawagin ang direct.open o proxied.open sa object na responsable sa ruta. Binabago ng install_opener ang default para sa buong proseso na ginagamit ng mga convenience call ng urllib; kaya maaaring maapektuhan ng library na gumagamit nito ang hindi kaugnay na code. Hindi ito kailangan para sa nakahiwalay na opener sa itaas.
Ang argument na timeout ay setting ng isang operasyon, hindi takdang oras sa aktuwal na panahon para sa kabuuan ng bawat transfer. Basahin lamang ang kinakailangang data at gumamit ng deadline sa mas mataas na antas kung mahigpit ang kabuuang oras ng trabaho.
Hindi binabago ng mga opener object na ito ang client ng ibang library, umiiral na proseso o mga proxy setting ng browser.