urllib/urllib2 support for specifying ip address

Chris Angelico rosuav at gmail.com
Thu Jun 19 08:03:31 EDT 2014


On Thu, Jun 19, 2014 at 9:51 PM, Robin Becker <robin at reportlab.com> wrote:
>> Since you mention urllib2, I'm assuming this is Python 2.x, not 3.x.
>> The exact version may be significant.
>>
> I can use python >= 3.3 if required.

The main reason I ask is in case something's changed. Basically, what
I did was go to my Python 2 installation (which happens to be 2.7.3,
because that's what Debian Wheezy ships with - not sure why it hasn't
been updated beyond that), pull up urllib2.py, and step through
manually, seeing where the hostname gets turned into an IP address.
Hence, this code:

>> import socket.
>> orig_create_connection = socket.create_connection
>> def create_connection(address, *args, **kwargs):
>>      if address == "domainA": address = "1.2.3.4"
>>      return orig_create_connection(address, *args, **kwargs)
>> socket.create_connection = create_connection
>> # Proceed to use urllib2.urlopen()
>>
>> Untested, but may do what you want.
>>
>
> this seems like a way forward

So if it works, that's great! If it doesn't, and you're on a different
version of Python (2.6? 2.4 even?), you might want to look at
repeating the exercise I did, with your actual Python.

But as a general rule, I'd recommend going with Python 3.x unless you
have a good reason for using 2.x. If a feature's been added to let you
mock in a different IP address, it'll be in 3.something but probably
not in 2.7.

>> Normally, though, I'd look at just changing the hosts file, if at all
>> possible. You're right that it does change state for your whole
>> computer, but it's generally the easiest solution.
>>
>> ChrisA
>>
> me too, but I want to start torturing from about 10 different servers so
> plumbum + a python script seems like a good choice and I would not really
> want to hack the hosts files back and forth on a regular basis.

Fair enough. In that case, the best thing to do would probably be
monkey-patching, with code along the lines of what I posted above.
Make the change as small and as specific as you can.

ChrisA



More information about the Python-list mailing list