goagent中的do_CONNECT方法在哪里被调用?

时间:2013-07-24 07:28:03

标签: python http proxy

我正在阅读goagent的早期版本,我不知道调用do_CONNECT方法在哪里。

class GaeProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    ...
    def do_CONNECT(self):
        ...

也不会调用下一页中的相同方法。 click here

是的,如果你搜索“do_CONNECT”,你几乎什么也得不到,但要搜索“http方法CONNECT”

2 个答案:

答案 0 :(得分:1)

GaeProxyHandler的基类是BaseHTTPRequestHandler,因此代码可以用BaseHTTPRequestHandler编写

如果要运行代理,则应运行以下代码:

server = LocalProxyServer((common.LISTEN_IP, common.LISTEN_PORT), GAEProxyHandler)
server.serve_forever()

所以你知道服务器本身可能会编写关于现在调用方法do_CONNECT的代码。

让我们看看它的回溯,实际上是这样。

  File "E:\Python33\lib\threading.py", line 616, in _bootstrap
    self._bootstrap_inner()
  File "E:\Python33\lib\threading.py", line 639, in _bootstrap_inner
    self.run()
  File "E:\Python33\lib\threading.py", line 596, in run
    self._target(*self._args, **self._kwargs)
  File "E:\Python33\lib\socketserver.py", line 610, in process_request_thread
    self.finish_request(request, client_address)
  File "E:\Python33\lib\socketserver.py", line 345, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "E:\Python33\lib\socketserver.py", line 666, in __init__
    self.handle()
  File "E:\Python33\lib\http\server.py", line 400, in handle
    self.handle_one_request()
  File "E:\Python33\lib\http\server.py", line 388, in handle_one_request
    method()
  File "E:\eclipse\workspace\GoAgent\src\goagent-local\proxy.py", line 1758, in **do_CONNECT**

查看最后的 do_CONNECT

答案 1 :(得分:1)

CONNECT是一种类似GET或POST的方法,让客户端在向REAL服务器发送请求之前告诉PROXY服务器他们需要完成ssl握手。

因此,当需要转发https请求时,将调用do_CONNECT。

检查this