python - python中的http代理,我应该何时以及如何关闭连接?
问题描述
对于一个学校项目,我需要在 python 中打开一个代理服务器。我的代理服务器工作并在浏览器上显示页面,但问题是它在页面显示后没有关闭连接,也没有发送更多请求。这个问题特别发生在连接请求启动代理隧道之后,所以我不知道什么时候应该关闭客户端和服务器之间的连接。我应该何时以及如何关闭它们之间的连接?
def get_data(sock):
data = b''
data_add = b'test'
try:
while len(data_add) != 0:
# receive data from web server
data_add = sock.recv(4096)
data += data_add
except Exception as e:
print("2:" + str(e) + " ")
return data
def handle_connect_command(client_socket, my_socket):
request = b'test'
try:
send_data(client_socket, b'HTTP/1.1 200 OK\r\n\r\n')
while True:
request = get_data(client_socket)
send_data(my_socket, request)
response = get_data(my_socket)
send_data(client_socket, response)
except Exception as e:
print("5:" + str(e))
print("Connection lost")
client_socket.close()
my_socket.close()
def threaded(client_socket):
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
request = b'Test'
try:
while len(request) > 0:
# data received from client
request = get_data(client_socket)
web_server, port, command = analyze_request(request)
print(web_server + ' ' + str(port))
my_socket = connect_to_server(web_server, port)
if command.lower() == "connect":
handle_connect_command(client_socket, my_socket)
break
else:
send_data(my_socket, request)
response = get_data(my_socket)
my_socket.close()
send_data(client_socket, response)
except Exception as e:
print("6:" + str(e))
# connection closed
client_socket.close()
my_socket.close()
解决方案
假设您使用的是 sock/sockets,您可以简单地运行:
server.quit()
或者
session.close()
如果您正在使用请求。
创建服务器对象后。
何时关闭连接的问题是我们需要查看您的代码的问题。
从逻辑上讲,当不再需要进行交互时,您将关闭连接
推荐阅读
- recovery - 损坏的 NAS 设备 - 如何从 BTRFS/RAID6 卷恢复数据 (4 x 4 TB)
- vba - 在 Outlook VBA 中导出收件人邮件地址而不是名称
- mongodb - 对象的复杂嵌套数组从 mongodb 获取记录
- c# - 更改输入框值更改上的标签文本
- java - How to enhance classes properly at build time using Maven? OpenJPA
- api - 流式传输和 HTTP 客户端(一般行业问题)
- php - 我想使用高级自定义字段从前端上传图像
- python - 如何绕过 docker 中的 python 应用程序中的 pywin32 依赖项?
- c++ - 为什么 std::map 仅通过左值引用采用自定义比较器?
- c++ - 如何在 .clang-tidy 配置文件中注释一行?