პროქსის სათაურების დაყენება Requests-ის HTTPAdapter.proxy_headers-ით
გააფართოვეთ HTTPAdapter.proxy_headers პროქსის მიერ განსაზღვრული ველისთვის და შეინარჩუნეთ Requests-ის არსებული პროქსი-ავთენტიფიკაციის სათაურის გენერაცია.
პროქსის ოპერატორის მიერ განსაზღვრული სათაურისთვის 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-ში პროქსი-სპეციფიკურია, არ არის კონფიდენციალურობის გარანტია, თუ პროქსი მას შემდგომ გადასცემს.