Python Requests: Login Basic terpisah untuk proxy dan situs web
Kirim login Basic proxy melalui URL proxy dan login Basic situs tujuan melalui argumen auth di Requests.
Proxy kantor meminta satu akun. Situs web di baliknya meminta akun lain. Requests punya masukan terpisah untuk kedua login Basic itu: kredensial di URL proxy dan argumen auth pada permintaan.
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()
Keempat variabel akun berasal dari konfigurasi kredensial aplikasi. Mengodekan nama pengguna dan kata sandi proxy secara terpisah mempertahankan karakter seperti tanda at tanpa mengubahnya menjadi pemisah URL.
Kunci https pada kamus memilih rute ini untuk tujuan HTTPS. Nilainya tetap dimulai dengan http:// karena itulah protokol yang dipakai untuk mencapai proxy contoh ini.
Pada permintaan HTTPS itu, login proxy termasuk dalam pertukaran CONNECT. Login situs termasuk dalam permintaan berikutnya melalui terowongan yang sudah terbentuk. Membiarkan adapter menurunkan otorisasi proxy dari URL-nya sendiri membuatnya tetap berada di lompatan yang tepat; untuk kasus Basic ini tidak diperlukan kelas autentikasi gabungan.
407 menandakan tantangan dari perantara. 401 dari situs menandakan tantangan dari tujuan. Gunakan respons itu untuk memutuskan akun mana dari dua akun yang dikonfigurasi perlu ditangani.