对于学校项目,我需要在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()
答案 0 :(得分:0)
假设您使用的是袜子,则可以简单地运行:
server.quit()
或
session.close()
如果您使用的是请求。
在创建服务器对象之后。
什么时候关闭连接是我们需要查看您的代码的问题。
从逻辑上讲,当不再需要任何交互时,您将关闭连接
答案 1 :(得分:0)
(如果应该使用)请求库,则可以这样做。
with requests.Session() as session:
session.get('target_url')
with条件中的所有内容完成后,这将自动关闭连接。