Untuk tantangan Basic dari proxy HTTP, gunakan ProxyBasicAuthHandler. Contoh HTTP biasa ini menyimpan rute dan akun dalam satu opener:

import os
from urllib.request import (
    ProxyHandler, ProxyBasicAuthHandler,
    HTTPPasswordMgrWithDefaultRealm, build_opener,
)

proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
    None, proxy_url,
    os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
    ProxyHandler({'http': proxy_url}),
    ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
    print(response.status)

Gunakan endpoint sebenarnya dan akun yang diberikan operator. Handler ini memakai pengelola kata sandi untuk tantangan proxy; cocokkan URI dan realm proxy yang dimaksud. Autentikasi Basic di tujuan memakai handler lain.

Memanggil opener secara langsung menjaga penyiapan ini tetap lokal. URL permintaan tetap situs web, bukan perantara. Rute HTTP yang tidak terenkripsi ini tidak mengenkripsi pertukaran Basic.

Jangan menyimpulkan dukungan terowongan HTTPS dari contoh ini. 407 selama CONNECT terjadi saat penyiapan, sebelum respons tujuan biasa; integrasi yang dipilih harus menangani autentikasi di sana. Mengubah handler login situs tidak dapat memperbaiki tantangan sebelumnya itu.

URL proxy yang membawa kredensial adalah format lain yang muncul pada contoh lama. Jika dipakai, enkode pemisah URL dengan benar dan jauhkan URL berisi rahasia yang dihasilkan dari log.

Artikel terkait