2012-06-27 145 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