我目前正在使用httplib编写代理服务器,当我尝试连接到HTTPS网站(例如facebook和google)时,我的客户端向我发送了"CONNECT"请求,如下所示:
CONNECT www.google.co.il:443 HTTP/1.1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n
Proxy-Connection: keep-alive\r\n
Connection: keep-alive\r\n
Host: www.google.co.il:443\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
我从互联网上拿了一个工作代理并把它打开,然后在wireshark上嗅探网络,对这个请求的响应应该是这样的:
HTTP/1.1 200 Connection established\n
Proxy-agent: Python Proxy/0.1.0 Draft 1\n
\n
Run Code Online (Sandbox Code Playgroud)
我注意到客户端将请求发送给代理本身,所以我决定使用socket,并以这种方式将响应发送到客户端:
if getmethod(clientreq) is "CONNECT":
text="HTTP/1.1 200 Connection established\nProxy-Agent: THE BB Proxy\n\n"
client.send(text)
Run Code Online (Sandbox Code Playgroud)
我真的希望处理这些"CONNECT"请求是解决方案,我的服务器最终会处理HTTPS请求,但事实并非如此,我发送给客户端的响应数据包甚至不会出现在wireshark上.
所以我的问题是:1."CONNECT"方法真正做到了什么?2.除了处理"CONNECT"方法请求以便与HTTPS服务器通信外,我还需要什么?