как сделать urlopen через ipv4 по умолчанию

Как сделать urlopen в python, чтобы даже если на базовой машине была включена сеть ipv6, запрос отправлялся через ipv4 вместо ipv6?


person Divick    schedule 27.06.2012    source источник
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
comment
Я попробовал это предложение, зарегистрированное здесь stackoverflow.com/a/6319043/420284, и оно работает для меня... даже хоть это и уродливый хак но наверное самый простой для меня. - person Divick; 27.06.2012