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 OKrnrn')
    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()

假设你使用的是袜子/插座,你可以简单地运行:

server.quit()

session.close()

如果您使用的是请求。

创建服务器对象后。

何时关闭连接的问题需要查看您的代码。

从逻辑上讲,当不需要再进行交互时,您将关闭连接

如果您正在使用请求库(您应该这样做),则可以执行此操作。

with requests.Session() as session:
    session.get('target_url') 

这将在 with 条件中的所有内容完成后自动关闭连接。

最新更新