Как я могу открыть сайт с urllib через прокси в Python? - PullRequest
25 голосов
/ 02 июля 2010

У меня есть эта программа, которая проверяет веб-сайт, и я хочу знать, как я могу проверить это через прокси в Python ...

это код, например

while True:
    try:
        h = urllib.urlopen(website)
        break
    except:
        print '['+time.strftime('%Y/%m/%d %H:%M:%S')+'] '+'ERROR. Trying again in a few seconds...'
        time.sleep(5)

Ответы [ 4 ]

38 голосов
/ 02 июля 2010

По умолчанию urlopen использует переменную среды http_proxy, чтобы определить, какой HTTP-прокси использовать:

$ export http_proxy='http://myproxy.example.com:1234'
$ python myscript.py  # Using http://myproxy.example.com:1234 as a proxy

Если вместо этого вы хотите указать прокси внутри приложения, вы можете указать proxies аргумент urlopen:

proxies = {'http': 'http://myproxy.example.com:1234'}
print "Using HTTP proxy %s" % proxies['http']
urllib.urlopen("http://www.google.com", proxies=proxies)

Редактировать: Если я правильно понимаю ваши комментарии, вы хотите попробовать несколько прокси-серверов и распечатать каждый прокси-сервер так, как вы его пытаетесь.Как насчет этого?

candidate_proxies = ['http://proxy1.example.com:1234',
                     'http://proxy2.example.com:1234',
                     'http://proxy3.example.com:1234']
for proxy in candidate_proxies:
    print "Trying HTTP proxy %s" % proxy
    try:
        result = urllib.urlopen("http://www.google.com", proxies={'http': proxy})
        print "Got URL using proxy %s" % proxy
        break
    except:
        print "Trying next proxy in 5 seconds"
        time.sleep(5)
27 голосов
/ 27 апреля 2016

Python 3 немного отличается здесь.Он попытается автоматически определить настройки прокси, но если вам нужны определенные или ручные настройки прокси, подумайте о таком виде кода:

#!/usr/bin/env python3
import urllib.request

proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:pass@server:port', 
                                             'https': 'https://...'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

with urllib.request.urlopen(url) as response:
    # ... implement things such as 'html = response.read()'

См. Также соответствующий раздел в документации по Python 3

3 голосов
/ 25 марта 2016

Вот пример руководства по коду, как использовать urllib для подключения через прокси:

authinfo = urllib.request.HTTPBasicAuthHandler()

proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})

# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
                                     urllib.request.CacheFTPHandler)

# install it
urllib.request.install_opener(opener)

f = urllib.request.urlopen('http://www.google.com/')
"""
0 голосов
/ 03 августа 2017

Для http и https используйте:

proxies = {'http':'http://proxy-source-ip:proxy-port',
           'https':'https://proxy-source-ip:proxy-port'}

аналогично можно добавить больше прокси

proxies = {'http':'http://proxy1-source-ip:proxy-port',
           'http':'http://proxy2-source-ip:proxy-port'
           ...
          }

использование

filehandle = urllib.urlopen( external_url , proxies=proxies)

Не используйте прокси (в случае ссылок внутри сети)

filehandle = urllib.urlopen(external_url, proxies={})

Использовать аутентификацию прокси через имя пользователя и пароль

proxies = {'http':'http://username:password@proxy-source-ip:proxy-port',
           'https':'https://username:password@proxy-source-ip:proxy-port'}

Примечание: избегать использования специальных символов, таких как :,@ в имени пользователя и паролях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...