Форум сайта python.su
Здрасивуйте, подскажите как сделать для каждого вызова urllib2.urlopen свой прокси. Юзаю следуещее, как это усовершентсвовать? В доках по либе видел метод set_proxy для Request, но не понял как юзать.
def initproxy():
if PROXY is not None :
proxy_support = urllib2.ProxyHandler( {“http” : PROXY} )
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)
else:
opener = urllib2.build_opener(urllib2.HTTPHandler)
opener.addheaders =
urllib2.install_opener(opener)
request = urllib2.Request(TARGET+self.path, “”, headers)
request.set_proxy(self,PROXY)
objurl = urllib2.urlopen(request)
Офлайн
А именно так. Зарегистрировать свой opener. Как именно лучше всего - смотреть нужно отдельно. Твой метод тоже хорош.
Офлайн
Абсолютно согласен, чем меньше кода тем безопасней и быстрее. Только уточнить хотел мне initproxy перед каждым вызовом urllib2.urlopen вызывать? чтобы сменить прокси. Хочу делать запросы на разные прокси и наверно из разных потоков. Как лучше?
Офлайн
Так ведь:
_opener = None
def urlopen(url, data=None):
global _opener
if _opener is None:
_opener = build_opener()
return _opener.open(url, data)
def install_opener(opener):
global _opener
_opener = opener
Делай свой opener как обычно, но запоминай его (в потоке, для каждого прокси - как удобней).
А потом всего лишь нужно вызвать opener.open(url_or_request, data=None)
Опять повторю совет - читай исходники!!!
Офлайн