Я проверил urllib2
, и он не установит адрес источника (по крайней мере, в Python 2.7). Базовая библиотека - httplib
, которая имеет эту функцию, так что вам может повезти, если вы воспользуетесь ею напрямую.
Из документации httplib :
class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])
Необязательный параметр source_address
может быть кортежем (хоста, порта) для использования в качестве адреса источника, с которого устанавливается HTTP-соединение.
Вы даже можете убедить urllib2
использовать эту функцию, создав собственный класс HTTPHandler
. Вам нужно будет продублировать некоторый код из urllib2.py
, потому что AbstractHTTPHandler
использует более простую версию этого вызова:
class AbstractHTTPHandler(BaseHandler):
# ...
def do_open(self, http_class, req):
# ...
h = http_class(host, timeout=req.timeout) # will parse host:port
Где http_class
равно httplib.HTTPConnection
для HTTP-соединений.
Вероятно, это будет работать вместо этого, если исправление urllib2.py
(или его дублирование и переименование) является приемлемым решением:
h = http_class(host, timeout=req.timeout, source_address=(req.origin_req_host,0))