Как указать прокси-сервер с проверкой подлинности для http-соединения python?

Какой лучший способ указать прокси с именем пользователя и паролем для HTTP-соединения в Python?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
56
0
85 648
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Это работает для меня:

import urllib2

proxy = urllib2.ProxyHandler({'http': 'http://
username:password@proxyurl:proxyport'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)

conn = urllib2.urlopen('http://python.org')
return_str = conn.read()

urllib2.HTTPHandler добавлен по умолчанию (см. urllib2 doc). Кажется излишним добавлять его при сборке открывателя.

HongboZhu 22.09.2013 00:46

И почему вы используете urllib2.HTTPBasicAuthHandler (), если аутентификация не используется?

HongboZhu 22.09.2013 03:25

Обычно прокси имеют формат IP. Это то же самое, что и proxyurl, верно?

User 07.06.2014 18:22

Да. Я думаю, если у вас есть IP-адрес для вашего прокси-сервера, вы можете указать этот IP-адрес как proxyurl.

bernhardrusch 12.06.2014 10:00

Я использовал те же методы, но в другом порядке для ввода информации, и это не сработало, спасибо! proxy = urllib2.ProxyHandler ({'http': '172.24.8.69:8080'}) #proxy = urllib2.ProxyHandler ({}) proxy_auth_handler = urllib2.HTTPBasicAuthHandler () proxy_auth_handler.add_password (None, 'ixx.goutrathrape PoutrathorPassword ') opener = urllib2.build_opener (proxy, proxy_auth_handler) opener = urllib2.build_opener (proxy) urllib2.install_opener (opener) response = urllib2.urlopen (' google.com ') html = response.ml () print html = response.ml () print html = response.ml () print html = response.ml () print html = response.ml ()

Poutrathor 13.11.2015 22:56

Прочитав связанная ссылка, я решил закомментировать #auth = urllib2.HTTPBasicAuthHandler() и сменить открывалку на opener = urllib2.build_opener(proxy, urllib2.HTTPHandler), тогда у меня это сработало.

fatih_dur 21.10.2016 08:45

Лучший способ пройти через прокси-сервер, требующий аутентификации, - это использовать urllib2 для создания настраиваемого средства открытия URL, а затем использовать его для выполнения всех запросов, которые вы хотите пройти через прокси. Обратите внимание, в частности, вы, вероятно, не захотите вставлять пароль прокси-сервера в URL-адрес или исходный код Python (если это не просто быстрый взлом).

import urllib2

def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme = "http"):
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, proxyurl, proxyuser, proxypass)

    proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)

    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 4:
        url_opener = get_proxy_opener(*sys.argv[1:4])
        for url in sys.argv[4:]:
            print url_opener.open(url).headers
    else:
        print "Usage:", sys.argv[0], "proxy user pass fetchurls..."

В более сложной программе вы можете разделить эти компоненты по мере необходимости (например, используя только один менеджер паролей на время существования приложения). В документации python есть больше примеров того, как делать сложные вещи с urllib2, который также может оказаться полезным.

Или, если вы хотите установить его, чтобы он всегда использовался с urllib2.urlopen (поэтому вам не нужно держать ссылку на открыватель):

import urllib2
url = 'www.proxyurl.com'
username = 'user'
password = 'pass'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# None, with the "WithDefaultRealm" password manager means
# that the user/pass will be used for any realm (where
# there isn't a more specific match).
password_mgr.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
print urllib2.urlopen("http://www.example.com/folder/page.html").read()

Установка переменной окружения с именем http_proxy следующим образом: http: // имя пользователя: пароль @ proxy_url: порт

Но не совсем отвечаю на ответ.

Bouncner 13.04.2013 04:25

@Bouncner Отвечает на вопрос, а не на ответ. И он тоже не отвечает.

Marcello Grechi Lins 10.07.2015 01:02

Вот метод использования urllib

import urllib.request

# set up authentication info
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.python.org/')
"""

А где в вашем примере прокси-аутентификация? Ваш ProxyHandler не содержит данных авторизации прокси.

ww12 15.01.2021 17:10

пожалуйста, обратитесь по этой ссылке epydoc.sourceforge.net/stdlib/urllib2-module.html

daz 17.01.2021 15:10
Ответ принят как подходящий

Использовать это:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)

Думаю, это намного проще, чем использовать urllib. Я не понимаю, почему людям так нравится использовать urllib.

Вероятно, это лучший сценарий, и самое лучшее в использовании requests - это то, что вам не нужно беспокоиться о том, Python это 2 или 3.

Sagun Shrestha 17.04.2018 17:23

@Aminah Nuraini Не могли бы вы объяснить, что вы имеете в виду под именем пользователя: паролем?

Oshada 19.09.2018 08:10

@Oshada, замените его именем пользователя и паролем вашего прокси. Обычно вы получаете его от провайдера.

Aminah Nuraini 19.09.2018 12:03

Иногда людям приходится использовать те библиотеки, которые существуют на серверах. Невозможно установить библиотеки или ограниченный доступ.

SidJ 13.10.2020 05:35

Другие вопросы по теме