2016-01-03 5 views
1

Как я могу установить прокси для в Python 3. последний urllib я делаю следующийНастройка прокси urlib.request (Python3)

from urllib import request as urlrequest 
ask = urlrequest.Request(url)  # note that here Request has R not r as prev versions 
open = urlrequest.urlopen(req) 
open.read() 

Я попытался добавить прокси-сервер следующим образом:

ask=urlrequest.Request.set_proxy(ask,proxies,'http') 

Однако я не знаю, как правильно это, так как я получаю следующую ошибку:

336  def set_proxy(self, host, type): 
--> 337   if self.type == 'https' and not self._tunnel_host: 
    338    self._tunnel_host = self.host 
    339   else: 

AttributeError: 'NoneType' object has no attribute 'type' 

ответ

4

Вы следует называть set_proxy() на например класса Request, а не на сам класс:

from urllib import request as urlrequest 

proxy_host = 'localhost:1234' # host and port of your proxy 
url = 'http://www.httpbin.org/ip' 

req = urlrequest.Request(url) 
req.set_proxy(proxy_host, 'http') 

response = urlrequest.urlopen(req) 
print(response.read().decode('utf8')) 
+0

Довольно ПОЛЕЗНЫЕ ваше решение hoewer я не могу поставить его на практике из-за какой-то туннельная вопрос .Я должен упомянуть, что я только что прошел публичный прокси от HMA, действительно ПОЛЕЗНЫЕ Если некоторые из них могут помочь в решении этой проблемы. – gm1

+0

Я пообщаюсь с небольшим обновлением, я попробовал simmilar вещь с запросом, чтобы увидеть, изменился ли мой ip: 'импортные запросы r = запросы.get (" http://www.httpbin.org/ip ", прокси = {"https": "https // 195.154.231.43: 2128"}) print (r.text) 'и результат, полученный при печати, по-прежнему показывает мой первоначальный IP – gm1

+0

@ gm1: повторите свой второй комментарий: вам нужно используйте правильную схему HTTP. Если вы установите прокси-сервер HTTPS, он будет использоваться только при доступе к URL-адресам HTTPS. В вашем примере прокси не используется, поскольку URL-адрес HTTP, а не HTTPS. Измените URL на 'https: // www.httpbin.org/ip', и он будет использовать прокси (который должен быть' https: //195.154.231.43: 3128'). – mhawke

0

мне нужно отключить прокси в нашей среде компании, потому что я хотел получить доступ к серверу на локальном хосте. Я не мог отключить прокси-сервер с подходом из @mhawke (пытался передать {}, None и [] в качестве прокси).

Это сработало для меня (также может использоваться для установки определенного прокси-сервера, см. Комментарий в коде).

import urllib.request as request 

# disable proxy by passing an empty 
proxy_handler = request.ProxyHandler({}) 
# alertnatively you could set a proxy for http with 
# proxy_handler = request.ProxyHandler({'http': 'http://www.example.com:3128/'}) 

opener = request.build_opener(proxy_handler) 

url = 'http://www.example.org' 

# open the website with the opener 
req = opener.open(url) 
data = req.read().decode('utf8') 
print(data) 
Смежные вопросы