"Dan" <[EMAIL PROTECTED]> writes: > Does anybody know how to control the source IP address (IPv4) when > using the urllib2 library? I have a Linux box with several IP > addresses in the same subnet, and I want to simulate several > individuals within that subnet accessing web pages independently. I > need the functionality of urllib2 because there will be redirects and > other HTTP-type functions to implement. It would be nice if I could > create (and bind) sockets myself and then tell the urllib functions to > use those sockets. Perhaps there is some sort of "back-door" way of > doing this??? Any hints are appreciated!
There's no built-in support, but I expect it's very easy to do. I suppose the easiest way would be to derive from httplib.HTTPConnection, overriding .connect() to call .bind() on the socket. Call it BindingHTTPConnection, then define: class BindingHTTPHandler(urllib2.HTTPHandler): def http_open(self, req): return self.do_open(BindingHTTPConnection, req) Same goes for https: if hasattr(httplib, 'HTTPS'): class BindingHTTPSHandler(urllib2.HTTPSHandler): def https_open(self, req): return self.do_open(BindingHTTPSConnection, req) Personally, I probably wouldn't use build_opener(), but since the above classes derive from the corresponding urllib2 classes, you can do: opener = urllib2.build_opener(BindingHTTPHandler, BindingHTTPSHandler) response = opener.open('http://www.example.com/') John -- http://mail.python.org/mailman/listinfo/python-list