Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Проблема при обращении через прокси. urllib [RSS Feed]

#1 Июнь 26, 2013 16:21:03

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

Пробую просто со своего рабочего места обратиться , например, к яндексу.
Пишу на 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'

При всё при том, что через сторонний пакет requests у меня таки получилось получить ответ через прокси, буквально таким кодом:
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)

Офлайн

#2 Июнь 30, 2013 13:36:48

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Проблема при обращении через прокси. urllib

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)

Не вижу, где в этом коде задаётся адрес и порт прокси.

Офлайн

#3 Июль 1, 2013 08:25:15

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

Смотри внимательнее…

opener = request.build_opener(auth) # opener уже содержит необходимый адрес\порт прокси. Прописывать не нужно.

Объясняю: если брать urllib, то метод urllib.request.getproxies() возвращает словарь, уже содержащий прокси на ftp, http, https.

Отредактировано buddha (Июль 1, 2013 08:27:38)

Офлайн

#4 Июль 1, 2013 09:11:00

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Проблема при обращении через прокси. urllib

Я грю про следующее. Есть код:

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 содержит уже адрес и порт прокси. Откуда там взялся адрес и порт прокси?

Офлайн

#5 Июль 1, 2013 11:00:17

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

Я тоже этого не ожидал. Но видимо питон подцепляет адреса проксей из ОС.

Как я проверял(уже через 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'}

Офлайн

#6 Июль 1, 2013 19:18:32

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Проблема при обращении через прокси. urllib

Предлагаю для начала выложить код, который другой участник обсуждения может запустить и получить тот же эффект. Можно задать прокси прямо в коде?

Офлайн

#7 Июль 2, 2013 16:03:18

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

buddha
Я тоже этого не ожидал. Но видимо питон подцепляет адреса проксей из ОС.Как я проверял(уже через requests):
OC - Win?

Офлайн

#8 Июль 3, 2013 09:51:44

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

Верно Windows.

Офлайн

#9 Июль 3, 2013 17:45:06

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

buddha
Верно Windows.
Скорее всего, берется системный прокси (тот, который в IE прописан)

Офлайн

#10 Авг. 18, 2013 09:14:43

ring0za
Зарегистрирован: 2012-08-13
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема при обращении через прокси. urllib

Negotiate - это один из типов аутентификации для http прокси, как у вас нагуглить неполучилось ума неприложу… можно было просто не передавать user/password. Или условия непозволяют?

Офлайн

  • Начало
  • » Network
  • » Проблема при обращении через прокси. urllib[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version