Когато Requests е наличен в проекта, подайте на извикването съпоставяне на проксита:

import requests

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
    timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)

Заменете loopback крайната точка с работещото си прокси или с кандидат от списъка с HTTP проксита, който ще тествате с тази заявка. Ключовете описват схемите на местоназначението: http за HTTP URL адреси и https за HTTPS URL адреси. Стойностите описват слушащата крайна точка на проксито. Те може да са различни, ако мрежата изисква отделни маршрути.

Стойност за прокси http:// под ключа https е умишлена. Requests иска CONNECT тунел от HTTP слушателя и след това установява TLS с местоназначението през него, съобразно политиката на проксито за цели и портове. Смяната на стойността с https:// иска TLS до самото прокси; това може да се провали, ако слушателят очаква нешифрован HTTP.

Какво означават двете стойности за изчакване

timeout=(5, 15) задава времена за изчакване на свързване и четене. Не налага общ краен срок от петнадесет секунди. Периодично постъпващи данни, множество адреси и опити за свързване могат да удължат изминалото време. Requests не задава общо изчакване, когато пропуснете настройката; изберете граници според отговора и добавете краен срок на приложно ниво, ако задачата изисква строг общ времеви бюджет.

Обработвайте грешката на етапа, на който възниква

try:
    response = requests.get(
        "https://example.com/",
        proxies=proxies,
        timeout=(5, 15),
    )
    response.raise_for_status()
except requests.exceptions.ProxyError as error:
    print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
    print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
    print("HTTP status:", error.response.status_code)

Отхвърлен CONNECT може да предизвика ProxyError, преди да има отговор от местоназначението. Клонът HTTPError следва получен отговор със статус на грешка; Timeout означава, че зададена граница е изтекла. Разглеждайте локално веригите от изключения при установяване на връзката и премахвайте крайните точки с идентификационни данни и частните URL адреси преди споделяне.

Оставете проверката на сертификати включена. Ако упълномощената мрежа използва частен CA или управлявано прихващане, предоставете очакваните материали за доверие, вместо да изключвате проверката.

Изричните записи за всяка заявка управляват зададените тук маршрути, но пропуснатите схеми все още може да се влияят от откриването на прокси от средата. При преместване на извикването в многократно използваема Session решете как да взаимодействат променливите на средата, стойностите по подразбиране на Session и замените за заявката; повторната употреба на връзки и политиката за маршрутизиране са отделни решения.

Подобни статии