Փրոքսի օպերատորի սահմանած վերնագրի համար Requests-ը տրամադրում է HTTPAdapter.proxy_headers-ը որպես վերափոխման կետ՝

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-ը այն դաշտի օրինակ է, որը հասկանում է հենց այս փրոքսին, ոչ թե յուրաքանչյուր միջնորդի հետ նույնականացման ստանդարտ եղանակ։

Սկսեք super().proxy_headers(proxy)-ից։ Requests-ը օգտագործում է այդ մեթոդը Proxy-Authorization ստեղծելու համար, երբ URL-ը տալիս է Basic հաշիվ։ Ամբողջ արդյունքը փոխարինելը կարող է կորցնել այդ վարքը։

Ադապտերը այդ արժեքները փոխանցում է urllib3-ի ProxyManager-ին։ HTTPS թունելի դեպքում դրանք ուղեկցում են CONNECT-ին։ Սովորական հարցման վերնագրերի քարտեզը նկարագրում է ավելի ուշ նպատակակետ հարցումը։

Փրոքսի մենեջերները քեշվում են ըստ փրոքսի URL-ի։ Մի՛ ընկալեք այս կեռիկը որպես չքեշավորված՝ յուրաքանչյուր գործարարական հարցման համար callback այն արժեքի համար, որը պետք է փոխվի յուրաքանչյուր կանչում։ Ընտրեք տրանսպորտի պատկանելությունը համապատասխանաբար, երբ հաշվի նշիչը փոփոխվում է։

Պարզ HTTP փոխանցման դեպքում փրոքսի դաշտերը դեռ պետք է միջնորդի նախատեսած սպառման քաղաքականությունը։ Այն, որ վերնագիրը փրոքսի-հատուկ է հաճախորդի API-ում, գաղտնիության երաշխիք չէ, եթե փրոքսին այն փոխանցում է առաջ։

Առնչվող հոդվածներ