2015-02-14 3 views
21

Я получаю URL с:запросы: как отключить/обойти прокси

r = requests.get("http://myserver.com") 

Как я могу видеть в «access.log» из «myserver.com», используется система прокси-клиента. Но я хочу отключить использование прокси вообще requests.

+0

ли не добавлять доверенные лица = Нет для запроса работы? – Lesleh

+0

@Lesleh, по умолчанию для аргумента ключевого слова 'proxies', что означает, что он вообще не изменит поведение. –

+0

@ Lesleh Я пробовал это и, к сожалению, не работает. :( – t777

ответ

49

Единственный способ, которым я в настоящее время нахожусь в курсе для отключения прокси полностью является следующее:

  • Создать сеанс
  • Установите session.trust_env в False
  • Создайте запрос с помощью этой сессии
import requests 

session = requests.Session() 
session.trust_env = False 

response = session.get('http://www.stackoverflow.com') 

Основано на this comment by Lukasa и (с ограниченной) документацией по requests.Session.trust_env.

Примечание: Установка trust_env к False также игнорирует следующее:

  • аутентификации информацию из .netrc (code)
  • CA пучков, определенных в REQUESTS_CA_BUNDLE или CURL_CA_BUNDLE (code)

Однако, если вы хотите отключить только прокси для конкретного домена (как localhost), вы можете использовать NO_PROXY environment variable:

import os 
import requests 

os.environ['NO_PROXY'] = 'stackoverflow.com' 

response = requests.get('http://www.stackoverflow.com') 
+0

Имеет ли 'trust_env = False' любые другие (побочные) эффекты, чем отключение прокси? – t777

+2

@ t777 действительно - обновил мой ответ. –

+3

NO_PROXY - правильный ответ – aaa90210

1

запросы библиотеки Уважает переменные окружения. http://docs.python-requests.org/en/latest/user/advanced/#proxies

Так что попробуйте удалить переменные окружения HTTP_PROXY и HTTPS_PROXY.

import os 
for k in list(os.environ.keys()): 
    if k.lower().endswith('_proxy'): 
     del os.environ[k] 
+0

Он определенно не проверяет переменные окружения на Mac. –

19

Вы можете выбрать прокси для каждого запроса. От the docs:

import requests 

proxies = { 
    "http": "http://10.10.1.10:3128", 
    "https": "http://10.10.1.10:1080", 
} 

requests.get("http://example.org", proxies=proxies) 

Так, чтобы отключить прокси-сервер, просто установите каждый один на None:

import requests 

proxies = { 
    "http": None, 
    "https": None, 
} 

requests.get("http://example.org", proxies=proxies) 
+0

У вас есть чек на 2-й случай. В моем случае он не работает, то есть он все еще использует системный прокси. –

+0

@sonukumar Что вы подразумеваете под «2-м корпусом?» – jtpereyda

+0

ой! Я имею в виду использование параметра proxies для получения метода. –

Смежные вопросы