Каков способ делать urlopen в python таким образом, что даже если базовый компьютер имеет сетевую инфраструктуру ipv6, запрос отправляется через ipv4 вместо ipv6?Как сделать urlopen по ipv4 по умолчанию
ответ
Я изучил исходный код. К сожалению, urllib.urlopen()
, похоже, использует httplib.HTTP()
, что даже не позволяет установить адрес источника.
urllib2.urlopen()
использует httplib.HTTPConnection()
, которые вы могли бы наследовать от и создать класс, который по умолчанию устанавливает адрес источника '0.0.0.0'
вместо ''
. Затем вы можете каким-то образом ввести этот новый переопределенный класс в материал urllib2
, создав «новый» HTTPHandler()
(посмотрите, как это делается в urllib2.py
) и новый нож, который вы build_opener()
и/или install_opener()
.
Извините, что не очень точно, но я никогда не делал такого и не знаю точно, как это работает.
Я попробовал предложение, зарегистрированное здесь http://stackoverflow.com/a/6319043/420284, и оно работает для меня .., хотя это уродливое взломать, но, возможно, самое простое для меня. – Divick
Возможный дубликат [Force python mechanize/urllib2 использовать только запросы A?] (Http://stackoverflow.com/questions/2014534/force-python-mechanize-urllib2-to-only-use-a-requests) – geoffspear
или, возможно, [как заставить библиотеку httplib python использовать только A-запросы] (http://stackoverflow.com/questions/1540749/how-to-force-python-httplib-library-to-use-only-a-requests)? – glglgl
'urllib.urlopen()' или 'urllib2.urlopen()'? – glglgl