Как написать прокси сервер на python?

Пользователь

от kaleigh , в категории: Python , 2 года назад

Как написать прокси сервер на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от NicolasSsh , 2 года назад

@kaleigh  Прокси сервера обычно имею большое количество строк кода и довольно сложны, но упрощённую версию можно написать с помощью библиотеки requests.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import requests

response = requests.get(
    url = "http://dropcode.ru",
    proxies = {"http" : "some_proxy"} # Вместо 'some_proxy' устанавливем прокси
)

print(response)

# Создавая подключение с помощью прокси, мы уже создаем некий прокси-сервер

Пользователь

от charles.orn , год назад

@kaleigh 

Чтобы написать прокси-сервер на Python, можно использовать стандартную библиотеку socket для создания сокетов и передачи данных между клиентами и серверами.


Вот пример простого прокси-сервера на Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import socket

def proxy_server(host, port):
    # Создаем сокет
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # Привязываем сокет к хосту и порту
    server_socket.bind((host, port))
    
    # Начинаем прослушивать входящие соединения
    server_socket.listen()
    print(f"Proxy server listening on {host}:{port}...")
    
    while True:
        # Принимаем входящее соединение
        client_socket, client_address = server_socket.accept()
        print(f"Accepted connection from {client_address[0]}:{client_address[1]}")
        
        # Получаем запрос от клиента
        request = client_socket.recv(4096)
        
        # Отправляем запрос серверу
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_socket.connect(('www.example.com', 80))
        server_socket.sendall(request)
        
        # Получаем ответ от сервера
        response = server_socket.recv(4096)
        
        # Отправляем ответ клиенту
        client_socket.sendall(response)
        
        # Закрываем соединения
        server_socket.close()
        client_socket.close()


Этот пример просто передает запросы от клиентов к серверу, а затем отправляет ответы от сервера обратно клиенту. Для реального прокси-сервера потребуется намного больше логики для обработки и анализа запросов и ответов. Кроме того, потребуется добавить поддержку HTTPS и других протоколов, что затруднительно на Python, если не использовать готовые библиотеки.