Найти - Пользователи
Полная версия: urllib.request.install_opener и многопоточность
Начало » Web » urllib.request.install_opener и многопоточность
1
Игнат
скажите пожалуйста, если каждый поток ставит себе соксХендлер, чтобы работать через свою прокси, как получается так что у всех эти прокси разные?

# каждый поток ставит прокси так:

socks_hnd = SocksHandler.SocksHandler(PROXY_TYPE_HTTP, ip, port)
opener = urllib.request.build_opener(socks_hnd)
urllib.request.install_opener(opener)
urllib.request ведь не хранится отдельно для каждого потока
куда тогда устанавливается опенер, настроенный на конкретную прокси?
kazaff
Попробуйте этот код:
class HTTPWithProxy:
def __init__( self, proxy, user_agent='Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3', headers={} ):
''' proxy - {'http':'ipaddres:port'} '''
# создаем опенер, который может работать через прокси
self.opener = urllib.request.build_opener( urllib.request.ProxyHandler( proxy ) )

self.opener.addheaders = [ {'User-agent', user_agent} ]

def request( self, url, data={}, timeout=5 ):
if data:
try:
html = self.opener.open( url, data, timeout )
except Exception as error:
print( 'Error:', error )
else:
try:
html = self.opener.open( url, None, timeout )
except Exception as error:
print( 'Error:', error )
return html
Только в нем не сокс, а http-proxy
connect = HTTPWithProxy( proxy )
response = connect.request( 'http://cmyip.com' )
page = response.read()
Игнат
спасибо, но рабочий код и у меня есть
я хотел бы понять как он работает
Андрей Светлов
устанавливается в библиотеку как синглетон
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB