簡體   English   中英

python中的http代理,何時以及該如何關閉連接?

[英]http proxy in python, when and how exactly should I close connection?

對於學校項目,我需要在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()

假設您使用的是襪子,則可以簡單地運行:

server.quit()

要么

session.close()

如果您使用的是請求。

創建服務器對象之后。

什么時候關閉連接是我們需要查看您的代碼的問題。

從邏輯上講,當不再需要任何交互時,您將關閉連接

如果正在(並且應該使用)請求庫,則可以執行此操作。

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

當with條件中的所有內容完成時,這將自動關閉連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM