Я использую Python 2.6.5 и пытаюсь перехватить необработанный http-запрос, отправленный через HTTP, это работает нормально, за исключением случаев, когда я добавляю прокси-обработчик в микс, поэтому ситуация выглядит следующим образом:
- HTTP и HTTPS-запросы работают нормально без обработчик прокси: необработанный HTTP-запрос перехвачен
- HTTP-запросы работают нормально с обработчиком прокси: прокси-сервер в порядке, необработанный HTTP-запрос перехвачен
- HTTPS-запросы терпят неудачу с обработчиком прокси: прокси в порядке, но необработанный HTTP-запрос не перехватывается!
Следующие вопросы близки, но не решают мою проблему:
Это яЧто я делаю:
class MyHTTPConnection(httplib.HTTPConnection):
def send(self, s):
global RawRequest
RawRequest = s # Saving to global variable for Requester class to see
httplib.HTTPConnection.send(self, s)
class MyHTTPHandler(urllib2.HTTPHandler):
def http_open(self, req):
return self.do_open(MyHTTPConnection, req)
class MyHTTPSConnection(httplib.HTTPSConnection):
def send(self, s):
global RawRequest
RawRequest = s # Saving to global variable for Requester class to see
httplib.HTTPSConnection.send(self, s)
class MyHTTPSHandler(urllib2.HTTPSHandler):
def https_open(self, req):
return self.do_open(MyHTTPSConnection, req)
Класс запроса:
global RawRequest
ProxyConf = { 'http':'http://127.0.0.1:8080', 'https':'http://127.0.0.1:8080' }
# If ProxyConf = { 'http':'http://127.0.0.1:8080' }, then Raw HTTPS request captured BUT the proxy does not see the HTTPS request!
# Also tried with similar results: ProxyConf = { 'http':'http://127.0.0.1:8080', 'https':'https://127.0.0.1:8080' }
ProxyHandler = urllib2.ProxyHandler(ProxyConf)
urllib2.install_opener(urllib2.build_opener(ProxyHandler, MyHTTPHandler, MyHTTPSHandler))
urllib2.Request('http://www.google.com', None) # global RawRequest updated
# This is the problem: global RawRequest NOT updated!?
urllib2.Request('https://accounts.google.com', None)
НО, если я удаляю ProxyHandler, он работает!:
global RawRequest
urllib2.install_opener(urllib2.build_opener(MyHTTPHandler, MyHTTPSHandler))
urllib2.Request('http://www.google.com', None) # global RawRequest updated
urllib2.Request('https://accounts.google.com', None) # global RawRequest updated
Как я могудобавить ProxyHandler в смесь, сохраняя доступ к RawRequest?
Заранее спасибо.