Untuk pengepala yang ditentukan pengendali proksi, Requests menyediakan HTTPAdapter.proxy_headers sebagai titik tindih:

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 ialah contoh medan yang difahami proksi ini, bukan cara standard untuk mengesahkan diri dengan setiap perantara.

Mulakan dengan super().proxy_headers(proxy). Requests menggunakan kaedah itu untuk menjana Proxy-Authorization apabila URL membekalkan akaun Basic. Menggantikan seluruh hasil boleh menghilangkan tingkah laku itu.

Penyesuai menyalurkan nilai ini kepada ProxyManager urllib3. Dalam terowong HTTPS, nilai itu menemani CONNECT. Pemetaan pengepala permintaan biasa menerangkan permintaan ke destinasi yang kemudian.

Pengurus proksi dicache mengikut URL proksi. Jangan anggap cangkuk ini sebagai panggilan balik tanpa cache bagi setiap permintaan perniagaan untuk nilai yang mesti berubah pada setiap panggilan. Pilih pemilikan pengangkutan sewajarnya apabila penanda akaun berubah-ubah.

Dalam penghantaran HTTP biasa, medan proksi masih memerlukan dasar penggunaan yang dimaksudkan perantara. Pengepala yang khusus proksi dalam API klien bukan jaminan kerahsiaan jika proksi menghantarnya ke hadapan.

Artikel berkaitan