[英]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.