HTTP прокси в Python, когда и как именно я должен закрыть соединение? - PullRequest
0 голосов
/ 04 января 2019

Для школьного проекта мне нужно открыть прокси-сервер в 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()

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Если вы используете библиотеку запросов (и вам следует), вы можете сделать это.

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

Это автоматически закроет соединение, когда все в условии с завершится.

0 голосов
/ 04 января 2019

Если вы используете носок / сокеты, вы можете просто запустить:

server.quit()

или

session.close()

если вы используете запросы.

после создания объекта сервера.

Вопрос о том, КОГДА закрыть соединение - это то, для чего нам нужен ваш код.

логически вы бы закрыли соединение, когда больше не нужно взаимодействовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...