Отправка запроса CONNECT (python, socket, ssl)

Нужна помощь, у меня не хватает знаний чтобы понять в чем проблема, планирую сделать прокси-сервер, пытаюсь понять почему сервер отвечает 400 close на запрос CONNECT, но 200 на GET. 2 запроса в примере.

Пример кода только с отправкой запроса на сервер:

import ssl
import socket

data_rec = b''
# mess_req = b'CONNECT httpbin.org:443  HTTP/1.1\r\nHost: httpbin.org:443\r\n\r\n'
mess_req = b"GET / HTTP/1.1\r\nHost:www.httpbin.org\r\n\r\n"

if __name__ == "__main__":
    context = ssl.create_default_context()
    context.load_verify_locations("rootCA1.pem")
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.settimeout(5)
    conn = context.wrap_socket(socket, server_hostname="httpbin.org")
    conn.connect(("httpbin.org", 443))
    try:
        conn.sendall(mess_req)
        while 1:
            data = conn.recv(512)
            if len(data) > 0:
                data_rec += data
            else:
                break
    except Exception as e:
        print("close")
    finally:
        conn.close()

Тут, если раскомментировать, на CONNECT - 400, на GET - 200 (убрал printы в примере)

GET

GET

CONNECT

CONNECT

В прокси сервере, если отслеживать конкретный домен, то обычно с клиента перехватывается запрос на CONNECT, отправляется запрос на адресат - возвращается 400, соответственно 400 переотправляем клиенту и на этом общение заканчивается, может есть подробная инфа по этому вопросу? Почему с прокси-сервера ответ на все запросы по всем серверам - 400.


Ответы (0 шт):