因此,基本上,我的系统中有三个主要组件,我将它们称为client,superProxy和proxyClient,它们全部在python文件中实现。 在客户端组件中,我只使用来自python的库请求执行一个简单的请求,该请求将被重定向到superProxy。
proxies = {
'http' : 'http://chan:1@localhost:8888',
'https': 'http://chan:1@localhost:8888'
}
r = requests.get('https://instagram.com/', proxies = proxies)
在superProxy文件中,我有一个mainHandler(tornado.web.requestHandler),它将处理客户端文件发送的请求。如果是“ https”,它将进入连接功能。因此,在该函数内部,只要有可用数据,便会从客户端连接中读取数据,然后通过网络套接字将其发送到proxyClient。
在proxyClient中,数据将通过websocket读取,并将打开客户端指定URL的套接字。然后它将从服务器接收答案,并通过websocket将其发送到superProxy,然后superProxy将向客户端回复服务器的答案。
因此,只要建立握手以及将数据发送到服务器或从服务器发送数据,组件之间的连接就会保持打开状态。 我使用WireShark跟踪发送到服务器的请求及其响应 观察握手和数据传输行为:
有意义的数据包在图像中用黑色标记。 似乎正在发生的行为是服务器请求证书,但是客户端从不发送包含证书的数据包。因此,连接以最后一个数据包关闭,这使我认为握手失败。为什么会这样呢?请求库不应该处理这个问题吗?我只是将请求消息和响应重定向到服务器,这还会给数据传输带来一些问题吗?