กำหนดเฮดเดอร์พร็อกซีด้วย HTTPAdapter.proxy_headers ของ Requests
ขยาย 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 การแทนที่ผลลัพธ์ทั้งหมดอาจทำให้สูญเสียพฤติกรรมนั้น
อะแดปเตอร์ส่งค่าเหล่านี้ไปยัง ProxyManager ของ urllib3 ในอุโมงค์ HTTPS ค่าเหล่านี้จะไปพร้อม CONNECT การแมปเฮดเดอร์คําขอปกติอธิบายคําขอปลายทางที่ตามมา
ตัวจัดการพร็อกซีถูกแคชตาม URL ของพร็อกซี อย่าถือว่าฮุกนี้เป็น callback ที่ไม่แคชต่อคําขอทางธุรกิจสำหรับค่าที่ต้องเปลี่ยนทุกครั้งที่เรียก เลือกความเป็นเจ้าของการขนส่งให้สอดคล้องเมื่อเครื่องหมายบัญชีเปลี่ยน
ในการส่งต่อ HTTP ธรรมดา ฟิลด์พร็อกซียังต้องใช้นโยบายการใช้ตามที่ตัวกลางตั้งใจไว้ การที่เฮดเดอร์เจาะจงพร็อกซีใน API ของไคลเอนต์ไม่ใช่การรับประกันความลับหากพร็อกซีส่งต่อไป