[Twisted-web] Web client through https proxy - is it even possible?
Matt Pruden
matt at appirio.com
Wed Mar 17 20:54:17 EDT 2010
I'm trying to post some data to a web server, but need to go through
an https proxy. I can't seem to find anyone that's pulled this off
with a twisted web client. I've been sniffing traffic and have it
close, but can't quite get past creating the SSL socket. Anything I
attempt to write to the transport after swapping out the standard
socket for SSL.Connection fails the SSL handshake on the remote end.
Here's the code so far:
class MyProtocol(client.HTTPPageGetter):
got_connect = False
def connectionMade(self):
proxy = os.environ.get('https_proxy')
if proxy:
self.transport.write('CONNECT %s:%s HTTP/1.0\r\n' %
(self.factory.host, self.factory.port))
self.sendHeader('Host', self.factory.headers.get("host",
self.factory.host))
self.sendHeader('User-Agent', self.factory.agent)
self.transport.write('\r\n')
else:
self.got_connect = True
if self.got_connect:
client.HTTPPageGetter.connectionMade(self)
def lineReceived(self, line):
if not self.got_connect:
self.got_connect == True
ctx = ssl.ClientContextFactory()
self.transport.stopReading()
self.transport.stopWriting()
self.transport.socket = SSL.Connection(ctx.getContext(),
self.transport.socket)
self.transport.fileno = self.transport.socket.fileno
self.transport.startReading()
client.HTTPPageGetter.connectionMade(self)
else:
client.HTTPPageGetter.lineReceived(self, line)
More information about the Twisted-web
mailing list