I found answer to my own question:<br><br><span style="font-family: courier new,monospace;">class NoVerifyClientContextFactory:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> """A context factory for SSL clients."""</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> isClient = 1</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> method = SSL.SSLv3_METHOD</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> def getContext(self):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> def x(*args):</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> return True</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> ctx=SSL.Context(self.method)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> #print dir(ctx)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> ctx.set_verify(SSL.VERIFY_NONE,x)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> return ctx</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def getPage(url, contextFactory=None, *args, **kwargs):</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> scheme, host, port, path = _parse(url)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> factory = HTTPClientFactory(url, *args, **kwargs)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if 1: # use a proxy</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> host, port = 'localhost', 8080</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> factory.path = url</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> if scheme == 'https':</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> from twisted.internet import ssl</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> if contextFactory is None:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> contextFactory = NoVerifyClientContextFactory()</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> reactor.connectSSL(host, port, factory, contextFactory)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> else:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> reactor.connectTCP(host, port, factory)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> return factory.deferred</span><br style="font-family: courier new,monospace;"><br clear="all">--<br>Konrads Smelkovs<br>Applied IT sorcery.<br>
<br><br><div class="gmail_quote">On Thu, Jul 30, 2009 at 10:15 PM, Konrads Smelkovs <span dir="ltr"><<a href="mailto:konrads@smelkovs.com">konrads@smelkovs.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello,<br><br>I am writing some scraper scripts and need to pass them through an intercepting proxy. getPage does not support a proxy argument and this code I found on internet won't work with SSL proxy (stalls indefinitely):<br>
<br><span style="font-family: courier new,monospace;">def getPage(url, contextFactory=None, *args, **kwargs):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> scheme, host, port, path = _parse(url)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> factory = HTTPClientFactory(url, *args, **kwargs)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> if 0: # use a proxy</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> host, port = 'localhost', 8080</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> factory.path = url</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if scheme == 'https':</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> from twisted.internet import ssl</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> if contextFactory is None:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> contextFactory = ssl.ClientContextFactory()</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> reactor.connectSSL(host, port, factory, contextFactory)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> else:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"> reactor.connectTCP(host, port, factory)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"> return factory.deferred</span><br>
<br>Plain http proxying works. My guess is that there is an issue with self-signed or otherwise invalid certificate the http proxy supplies. Any clues?<br><font color="#888888"><br>--<br>Konrads Smelkovs<br>Applied IT sorcery.<br>
</font></blockquote></div><br>