Note that there are some explanatory texts on larger screens.

plurals
  1. POTwisted Web Proxy
    primarykey
    data
    text
    <p>I have been running this code (from: <a href="http://blog.somethingaboutcode.com/?p=155" rel="nofollow noreferrer">http://blog.somethingaboutcode.com/?p=155</a> ):</p> <pre><code>from twisted.internet import reactor from twisted.web import http from twisted.web.proxy import Proxy, ProxyRequest, ProxyClientFactory, ProxyClient from ImageFile import Parser from StringIO import StringIO class InterceptingProxyClient(ProxyClient): def __init__(self, *args, **kwargs): ProxyClient.__init__(self, *args, **kwargs) self.image_parser = None def handleHeader(self, key, value): if key == "Content-Type" and value in ["image/jpeg", "image/gif", "image/png"]: self.image_parser = Parser() if key == "Content-Length" and self.image_parser: pass else: ProxyClient.handleHeader(self, key, value) def handleEndHeaders(self): if self.image_parser: pass #Need to calculate and send Content-Length first else: ProxyClient.handleEndHeaders(self) def handleResponsePart(self, buffer): print buffer if self.image_parser: self.image_parser.feed(buffer) else: ProxyClient.handleResponsePart(self, buffer) def handleResponseEnd(self): if self.image_parser: image = self.image_parser.close() try: format = image.format image = image.rotate(180) s = StringIO() image.save(s, format) buffer = s.getvalue() except: buffer = "" ProxyClient.handleHeader(self, "Content-Length", len(buffer)) ProxyClient.handleEndHeaders(self) ProxyClient.handleResponsePart(self, buffer) ProxyClient.handleResponseEnd(self) class InterceptingProxyClientFactory(ProxyClientFactory): protocol = InterceptingProxyClient class InterceptingProxyRequest(ProxyRequest): protocols = {'http': InterceptingProxyClientFactory} ports = {"http" : 80} class InterceptingProxy(Proxy): requestFactory = InterceptingProxyRequest factory = http.HTTPFactory() factory.protocol = InterceptingProxy reactor.listenTCP(8000, factory) reactor.run() </code></pre> <p>Whenever I get this and go to 127.0.0.1:8000 I get this:</p> <pre><code>Traceback (most recent call last): File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\python\log.py", line 84, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\python\log.py", line 69, in callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\python\context.p y", line 59, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\python\context.p y", line 37, in callWithContext return func(*args,**kw) --- &lt;exception caught here&gt; --- File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\internet\selectr eactor.py", line 146, in _doReadOrWrite why = getattr(selectable, method)() File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\internet\tcp.py" , line 460, in doRead return self.protocol.dataReceived(data) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\protocols\basic. py", line 251, in dataReceived why = self.lineReceived(line) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\web\http.py", li ne 1573, in lineReceived self.allContentReceived() File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\web\http.py", li ne 1641, in allContentReceived req.requestReceived(command, path, version) File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\web\http.py", li ne 807, in requestReceived self.process() File "C:\Program Files\Python 2.6.2\lib\site-packages\twisted\web\proxy.py", l ine 147, in process port = self.ports[protocol] exceptions.KeyError: '' </code></pre> <p>Whenever I setup firefox or chrome or opera to use the proxy on localhost:8000 there are no connections made to the proxy (and I can no longer connect to any page, though that is probably because it isn't connection to the proxy).</p> <hr> <p>Ok it still fails and with logging I get this output when I set firefox to use the proxy at localhost:8000 and don't visit the proxy directly from the web browser (such as by typing localhost:8000 in firefox's address bar)</p> <pre><code>2010-08-04 12:31:18-0400 [-] Log opened. 2010-08-04 12:31:29-0400 [-] twisted.web.http.HTTPFactory starting on 8000 2010-08-04 12:31:29-0400 [-] Starting factory &lt;twisted.web.http.HTTPFactory inst ance at 0x010B3EE0&gt; 2010-08-04 12:33:55-0400 [-] Received SIGINT, shutting down. 2010-08-04 12:33:55-0400 [twisted.web.http.HTTPFactory] (Port 8000 Closed) 2010-08-04 12:33:55-0400 [twisted.web.http.HTTPFactory] Stopping factory &lt;twiste d.web.http.HTTPFactory instance at 0x010B3EE0&gt; 2010-08-04 12:33:55-0400 [-] Main loop terminated. </code></pre> <p>However when I do visit the proxy directly I get the key error.</p> <p>Also for sniffing I can't; Wireshark doesn't seem to sniff the localhost traffic and if I use fiddler 2 it sets itself as the proxy (and so I am no longer using my proxy server) and then works (because it uses fiddler 2's proxy).</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload