Форум сайта python.su
Пробую просто со своего рабочего места обратиться , например, к яндексу.
Пишу на python 3.3. Выдаёт ошибку странную. Нагуглить почти ничего не получилось, кроме как на слова scheme: ‘Negotiate’
Вот код:
from urllib import request URL = 'http://www.yandex.ru' psw_mgr = request.HTTPPasswordMgrWithDefaultRealm() psw_mgr.add_password(None, URL, 'my_name', 'my_pass') auth = request.ProxyBasicAuthHandler(psw_mgr) opener = request.build_opener(auth) # opener уже содержит необходимый адрес\порт прокси. Прописывать не нужно. request.install_opener(opener) resp = request.urlopen(URL) print(resp)
Traceback (most recent call last):
File "D:/Projects/different/url/ex1.py", line 11, in <module>
resp = request.urlopen(URL)
File "C:\Python33\lib\urllib\request.py", line 160, in urlopen
return opener.open(url, data, timeout)
File "C:\Python33\lib\urllib\request.py", line 479, in open
response = meth(req, response)
File "C:\Python33\lib\urllib\request.py", line 591, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python33\lib\urllib\request.py", line 511, in error
result = self._call_chain(*args)
File "C:\Python33\lib\urllib\request.py", line 451, in _call_chain
result = func(*args)
File "C:\Python33\lib\urllib\request.py", line 985, in http_error_407
authority, req, headers)
File "C:\Python33\lib\urllib\request.py", line 935, in http_error_auth_reqed
scheme)
ValueError: AbstractBasicAuthHandler does not support the following scheme: 'Negotiate'
import requests resp = requests.get('http://www.yandex.ru', proxies={'http': 'http://my_name:my_pass@our.proxy.addr:8080'})
Отредактировано buddha (Июнь 26, 2013 16:23:24)
Офлайн
from urllib import request
URL = 'http://www.yandex.ru'
psw_mgr = request.HTTPPasswordMgrWithDefaultRealm()
psw_mgr.add_password(None, URL, 'my_name', 'my_pass')
auth = request.ProxyBasicAuthHandler(psw_mgr)
opener = request.build_opener(auth) # opener уже содержит необходимый адрес\порт прокси. Прописывать не нужно.
request.install_opener(opener)
resp = request.urlopen(URL)
print(resp)
Офлайн
Смотри внимательнее…
opener = request.build_opener(auth) # opener уже содержит необходимый адрес\порт прокси. Прописывать не нужно.
Отредактировано buddha (Июль 1, 2013 08:27:38)
Офлайн
Я грю про следующее. Есть код:
from urllib import request
URL = 'http://www.yandex.ru'
psw_mgr = request.HTTPPasswordMgrWithDefaultRealm()
psw_mgr.add_password(None, URL, 'my_name', 'my_pass')
auth = request.ProxyBasicAuthHandler(psw_mgr)
opener = request.build_opener(auth) # opener уже содержит необходимый адрес\порт прокси. Прописывать не нужно.
request.install_opener(opener)
resp = request.urlopen(URL)
print(resp)
Офлайн
Я тоже этого не ожидал. Но видимо питон подцепляет адреса проксей из ОС.
Как я проверял(уже через requests):
import requests resp = requests.get('http://www.google.ru', auth=requests.auth.HTTPProxyAuth('myname', 'mypass')) print(resp.text) # <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"><head><meta content="Поиск информации в интернете: веб страницы, картинки, видео и многое другое." ..............
>>> requests.utils.getproxies() {'https': 'https://our.proxy.addr:8080', 'ftp': 'ftp://our.proxy.addr:8080', 'http': 'http://our.proxy.addr:8080'} # тоже самое, что и выше >>> from urllib import request >>> request.getproxies() {'https': 'https://our.proxy.addr:8080', 'ftp': 'ftp://our.proxy.addr:8080', 'http': 'http://our.proxy.addr:8080'}
Офлайн
Предлагаю для начала выложить код, который другой участник обсуждения может запустить и получить тот же эффект. Можно задать прокси прямо в коде?
Офлайн
buddhaOC - Win?
Я тоже этого не ожидал. Но видимо питон подцепляет адреса проксей из ОС.Как я проверял(уже через requests):
Офлайн
Верно Windows.
Офлайн
buddhaСкорее всего, берется системный прокси (тот, который в IE прописан)
Верно Windows.
Офлайн
Negotiate - это один из типов аутентификации для http прокси, как у вас нагуглить неполучилось ума неприложу… можно было просто не передавать user/password. Или условия непозволяют?
Офлайн