2012-06-27 142 views
2

在python中执行urlopen的方法是什么,即使底层机器启用了ipv6联网,请求是通过ipv4而不是ipv6发送的?如何在默认情况下通过ipv4执行urlopen

+0

[Force python mechanize/urllib2只使用A请求?](http://stackoverflow.com/questions/2014534/force-python-mechanize-urllib2-to-only-use-a-requests) – geoffspear

+0

或者[如何强制python httplib库只使用A请求](http://stackoverflow.com/questions/1540749/how-to-force-python-httplib-library-to-use-only-a-requests )? – glglgl

+0

'urllib.urlopen()'或'urllib2.urlopen()'? – glglgl

回答

1

我看了一下源代码。不幸的是,urllib.urlopen()似乎使用httplib.HTTP(),它甚至不允许设置源地址。

urllib2.urlopen()使用httplib.HTTPConnection()您可以继承并创建一个默认情况下设置源地址'0.0.0.0'而不是''的类。然后,您可以通过创建一个“新”HTTPHandler()(看看它是如何在urllib2.py中完成的)以及您build_opener()和/或install_opener()的新开启者,将该新覆盖类注入urllib2

对不起,不是很确切,但我从来没有做过这样的事情,不知道究竟是如何工作。

+1

我尝试了建议,因为这里记录了http://stackoverflow.com/a/6319043/420284,它确实对我有用,即使它是丑陋的黑客,但对我来说可能是最简单的。 – Divick