Untuk header yang ditentukan operator proxy, Requests menyediakan HTTPAdapter.proxy_headers sebagai titik penimpaan:

from urllib.parse import urlsplit
import requests
from requests.adapters import HTTPAdapter

class TaggedProxy(HTTPAdapter):
    def proxy_headers(self, proxy):
        headers = super().proxy_headers(proxy)
        endpoint = urlsplit(proxy)
        if (endpoint.scheme == 'http'
                and endpoint.hostname == 'proxy.example'
                and endpoint.port == 8080):
            headers['X-Proxy-Account'] = 'department-a'
        return headers

with requests.Session() as session:
    adapter = TaggedProxy()
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    response = session.get(
        'https://service.example/data',
        proxies={'https': 'http://proxy.example:8080'},
        timeout=15,
    )

X-Proxy-Account adalah contoh field yang dipahami proxy ini, bukan cara standar untuk mengautentikasi ke setiap perantara.

Mulai dengan super().proxy_headers(proxy). Requests memakai metode itu untuk membuat Proxy-Authorization ketika URL menyediakan akun Basic. Mengganti seluruh hasil dapat menghilangkan perilaku tersebut.

Adapter meneruskan nilai-nilai ini ke ProxyManager urllib3. Pada terowongan HTTPS, nilai itu menyertai CONNECT. Pemetaan header permintaan biasa menjelaskan permintaan ke tujuan yang lebih akhir.

Manajer proxy di-cache per URL proxy. Jangan perlakukan hook ini sebagai callback tanpa cache per permintaan bisnis untuk nilai yang harus berubah pada setiap panggilan. Pilih kepemilikan transport sesuai itu ketika penanda akun bervariasi.

Pada penerusan HTTP biasa, field proxy tetap memerlukan kebijakan konsumsi yang dimaksudkan perantara. Header yang spesifik proxy di API klien bukan jaminan kerahasiaan bila proxy meneruskannya.

Artikel terkait