





Это работает для меня:
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.HTTPBasicAuthHandler (), если аутентификация не используется?
Обычно прокси имеют формат IP. Это то же самое, что и proxyurl, верно?
Да. Я думаю, если у вас есть IP-адрес для вашего прокси-сервера, вы можете указать этот IP-адрес как proxyurl.
Я использовал те же методы, но в другом порядке для ввода информации, и это не сработало, спасибо! 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 ()
Прочитав связанная ссылка, я решил закомментировать #auth = urllib2.HTTPBasicAuthHandler() и сменить открывалку на opener = urllib2.build_opener(proxy, urllib2.HTTPHandler), тогда у меня это сработало.
Лучший способ пройти через прокси-сервер, требующий аутентификации, - это использовать 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 Отвечает на вопрос, а не на ответ. И он тоже не отвечает.
Вот метод использования 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 не содержит данных авторизации прокси.
пожалуйста, обратитесь по этой ссылке epydoc.sourceforge.net/stdlib/urllib2-module.html
Использовать это:
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.
@Aminah Nuraini Не могли бы вы объяснить, что вы имеете в виду под именем пользователя: паролем?
@Oshada, замените его именем пользователя и паролем вашего прокси. Обычно вы получаете его от провайдера.
Иногда людям приходится использовать те библиотеки, которые существуют на серверах. Невозможно установить библиотеки или ограниченный доступ.
urllib2.HTTPHandler добавлен по умолчанию (см. urllib2 doc). Кажется излишним добавлять его при сборке открывателя.