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