Python Requests: hiwalay na Basic login para sa proxy at website
Ipasa ang Basic login ng proxy sa pamamagitan ng URL nito at ang Basic login ng destinasyong site sa pamamagitan ng auth argument ng Requests.
Ang proxy ng opisina ay humihingi ng isang account. Ang website sa likod nito ay humihingi ng iba. May hiwalay na input ang Requests para sa dalawang Basic login na iyon: ang mga kredensyal sa URL ng proxy at ang auth argument ng kahilingan.
from urllib.parse import quote
import requests
proxy_url = (
f"http://{quote(proxy_user, safe='')}:"
f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
"https://reports.example/private/",
proxies={"https": proxy_url},
auth=(site_user, site_password),
timeout=(5, 20),
)
response.raise_for_status()
Ang apat na account variable ay galing sa configuration ng kredensyal ng aplikasyon. Ang hiwalay na pag-encode ng username at password ng proxy ay nagpapanatili ng mga karakter tulad ng at sign nang hindi ginagawang delimiter ng URL.
Pinipili ng https key sa diksyunaryo ang rutang ito para sa destinasyong HTTPS. Nagsisimula pa rin ang value nito sa http:// dahil iyon ang protocol na ginagamit para maabot ang halimbawang proxy na ito.
Para sa HTTPS na kahilingang iyon, ang login ng proxy ay kabilang sa palitan ng CONNECT. Ang login ng site ay kabilang sa susunod na kahilingan sa pamamagitan ng naitayong tunnel. Ang pagpapahintulot sa adapter na makuha ang awtorisasyon ng proxy mula sa sarili nitong URL ay nagpapanatili nito sa tamang hop; para sa Basic na kasong ito ay hindi kailangan ang pinagsamang authentication class.
Ang 407 ay nagpapahiwatig ng hamon ng tagapamagitan. Ang 401 mula sa site ay nagpapahiwatig ng hamon ng destinasyon. Gamitin ang tugon na iyon upang magpasya kung alin sa dalawang naka-configure na account ang kailangan ng pansin.