Уведомления

Группа в Telegram: @pythonsu

#1 Июль 23, 2008 17:35:05

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

собственно как сделать веб-клиента, который бы лазил через прокси по тру-твистедовски?
курение гугля просветления не принесло



Офлайн

#2 Июль 24, 2008 08:25:53

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

proxy client Twisted

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from twisted.internet import reactor
from twisted.python import log
from twisted.web.http import HTTPFactory
from twisted.web.proxy import Proxy


if __name__ == '__main__':
fileObserver = log.FileLogObserver(sys.stdout)
fileObserver.timeFormat = '%H:%M:%S'
log.startLoggingWithObserver(fileObserver.emit)

factory = HTTPFactory()
factory.protocol = Proxy
reactor.listenTCP(8080, factory)

reactor.run()
..bw



Офлайн

#3 Июль 24, 2008 08:28:29

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

proxy client Twisted

А, ты же клиента просил :-).

Похоже в Twisted нет для этого решения. Почитай протокол HTTP, сделаю свою фабрику (или как то иначе) для работы с прокси. По идее это тот же клиент + несколько своеобразных заголовков. Я с этой частью протокола не знаком, поэтому помочь не могу.

..bw



Отредактировано (Июль 24, 2008 08:36:53)

Офлайн

#4 Июль 24, 2008 13:12:26

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

вот и я тоже удивился, когда обнаружил что клиента для прокси в твистеде найти немогу…….



Офлайн

#5 Июль 24, 2008 14:15:54

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

:)
Фрагмент творчества…

from urllib import urlencode
from StringIO import StringIO
from twisted.web2 import stream as stream_mod, http_headers
from twisted.web2.client.http import HTTPClientProtocol, ClientRequest
from twisted.internet import reactor, protocol, defer

def err(reason, defered):
if not defered.called:
defered.errback(reason)

def geturl_proxy(host, path, proxy_host, proxy_port, **kwargs):
d = protocol.ClientCreator(reactor, HTTPClientProtocol).connectTCP(proxy_host, proxy_port)
path = 'http://%s%s' % (host, path)
ret = defer.Deferred()
def gotResp(resp, defered):
def done(n, res, defered):
defered.callback(res.getvalue())
res = StringIO()
stream_mod.readStream(resp.stream, res.write).addCallback(done, res, defered).addErrback(err, defered)
def sendReq(proto):
q = '?'+urlencode(kwargs) if kwargs else ''
headers = http_headers.Headers({'Host': host})
proto.submitRequest(ClientRequest("GET", path+q, headers, None)).addCallback(gotResp, ret).addErrback(err, ret)
d.addCallback(sendReq).addErrback(err, ret)
return ret

if __name__=="__main__":
def f(*args):
for arg in args: print arg
reactor.stop()
geturl_proxy('ya.ru', '/', 'proxy.zzz', 3128).addBoth(f)
reactor.run()
Слегка работает…



Офлайн

#6 Сен. 2, 2008 16:50:40

Gos
От:
Зарегистрирован: 2008-09-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

только что столкнулся с такой же задачей. но оказалось все просто: нужно делать reactor.connectTCP на прокси, а всё остальное - стандартно.

пример:

hcf = HTTPClientFactory('http://mts.ru', method='GET') # нужно считать mts.ru
hcf.deferred.addCallbacks(on_suc, on_err)

proxy_host, proxy_port = ‘118.98.195.42’, 3128 # я лазил через этот прокси
reactor.connectTCP(proxy_host, proxy_port, hcf) # коннект к прокси !



Офлайн

#7 Сен. 2, 2008 18:31:53

Gos
От:
Зарегистрирован: 2008-09-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

если будут проблемы с CoDeen-проксями - пишите ;-)



Офлайн

#8 Окт. 10, 2008 09:39:45

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

proxy client Twisted

Со Squid 2.6 такое не работает. В GET (или другом методе) требуется передавать не только путь, а полный адрес. Squid, видимо, игнорирует заголовок Host. Еще возникнет проблема при редиректе, так как у тебя не будет возможности сделать connectTCP.

p.s. Накалякал вот тут, может кому пригодится: http://blog.handsdriver.net/2008/10/twisted.html

..bw



Отредактировано (Окт. 10, 2008 10:32:59)

Офлайн

#9 Окт. 13, 2008 12:50:54

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

proxy client Twisted

+1. как только появится время - протестим в боевых условиях =)



Офлайн

#10 Окт. 13, 2008 13:14:52

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

proxy client Twisted

Доложи о результатах, доработаю для наследников :-).

..bw



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version