Веб-сервер Python неправильно обрабатывает запросы POSTPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Веб-сервер Python неправильно обрабатывает запросы POST

Сообщение Гость »


Я создал простой веб-сервер, используя Python. Сервер предназначен для обработки запросов GET и POST для файлов PHP и HTML. GET-запросы вроде бы работают нормально, но с POST-запросами возникли проблемы.

Вот соответствующая часть моего серверного кода Python:

импортировать сокет импортировать ОС ПОРТ = 2728 # Функция для обслуживания файлов PHP def serve_php(клиент, имя файла): # Отправляем HTTP-заголовки, указывающие на успешный ответ client.sendall(b"HTTP/1.1 200 OK\n") client.sendall(b"Тип контента: text/html\n\n") # Читаем содержимое файла с open(filename, "r") как f: содержимое = f.read() # Найдите блоки кода PHP и выполните их в то время как "", начало) php_code = контент[start+5:end].strip() # Выполняем PHP-код и заменяем содержимое php_output = os.popen(f"php -r '{php_code}'").read() контент = контент[:start] + php_output + контент[конец+2:] # Отправляем измененный контент обратно клиенту client.sendall(content.encode()) # Функция для обработки клиентских запросов защита handle_client (клиент): данные = client.recv(1024).decode() если данные: # Разбираем метод запроса и запрошенный файл request_method = data.split(" ")[0] file_requested = data.split(" ")[1] # Если это запрос GET и файл является файлом PHP если request_method == "GET" и file_requested.endswith(".php"): имя_файла = os.path.join("htdocs", file_requested[1:]) если os.path.exists(имя файла): с open(filename, "rb") как f: # Обслуживание PHP-контента serve_php (клиент, имя файла) print("Файл PHP отправлен") еще: # Если файл не найден, отправьте ответ 404 client.sendall(b"HTTP/1.1 404 не найден\n") # Если это запрос GET и файл является HTML-файлом elif request_method == "GET" и file_requested.endswith(".html"): имя_файла = os.path.join("htdocs", file_requested[1:]) если os.path.exists(имя файла): с open(filename, "rb") как f: # Отправляем HTML-контент client.sendall(b"HTTP/1.1 200 OK\n") client.sendall(b"Тип контента: text/html\n\n") client.sendall(f.read()) print("HTML-файл отправлен") еще: # Если файл не найден, отправьте ответ 404 client.sendall(b"HTTP/1.1 404 не найден\n") # Если это запрос POST и файл является файлом PHP (аналогично GET) elif request_method == "POST" и file_requested.endswith(".php"): имя_файла = os.path.join("htdocs", file_requested[1:]) если os.path.exists(имя файла): с open(filename, "rb") как f: serve_php (клиент, имя файла) print("Файл PHP POST отправлен") еще: client.sendall(b"HTTP/1.1 404 не найден\n") # Если это запрос POST и файл является HTML-файлом (аналогично GET) elif request_method == "POST" и file_requested.endswith(".html"): имя_файла = os.path.join("htdocs", file_requested[1:]) если os.path.exists(имя файла): с open(filename, "rb") как f: client.sendall(b"HTTP/1.1 200 OK\n") client.sendall(b"Тип контента: text/html\n\n") client.sendall(f.read()) print("Файл HTML POST отправлен") еще: client.sendall(b"HTTP/1.1 404 не найден\n") # Если запрос относится к корневому каталогу elif request_method == "GET" и (file_requested == "/" или file_requested.endswith("/")): имя файла = os.path.join("htdocs", "index.php") если os.path.exists(имя файла): с open(filename, "rb") как f: client.sendall(b"HTTP/1.1 200 OK\n") client.sendall(b"Тип контента: text/html\n\n") client.sendall(f.read()) print("Файл PHP отправлен") еще: client.sendall(b"HTTP/1.1 404 не найден\n") еще: # Если запрос не соответствует ни одному из вышеперечисленных случаев, отправьте ответ 404 client.sendall(b"HTTP/1.1 404 не найден\n") # Закрываем клиентское соединение клиент.закрыть() # Функция для запуска сервера защита run_server(): server =ocket.socket(socket.AF_INET,ocket.SOCK_STREAM) # Создаем объект сокета для связи IPv4 # Привязываем сервер к указанному порту и начинаем прослушивать входящие соединения server.bind(('локальный хост', ПОРТ)) сервер.прослушивать(5) print(f"Сервер прослушивает порт {2728}") # Распечатываем сообщение о том, что сервер работает # Принимать и обрабатывать входящие соединения пока правда: клиент, адрес = server.accept() handle_client (клиент) если __name__ == '__main__': run_server() Я также предоставил форму PHP (form1.php), которая собирает два числа и отправляет их в другой сценарий PHP (form2.php) для обработки. Когда я отправляю форму, значения не доходят до сервера.

Вот код form1.php:

тело { переполнение: скрыто; поле: 0 пикселей; отступ: 0 пикселей; семейство шрифтов: Arial, без засечек; фон: #c5bde1; } div { цвет: #FF0000; } #форма { цвет: #000; граница: 0 пикселей, сплошная #afafaf; начертание шрифта: жирный; ширина: 30%; поле слева: 35%; поле сверху: 120 пикселей; выравнивание текста: по центру; отступ: 40 пикселей; отступ-верх: 20 пикселей; радиус границы: 3 пикселя; box-shadow: 0px 0px 8px #777; фон: rgba(255, 255, 255, 255); } вход { цвет: #777; начертание шрифта: жирный; ширина: 70%; отступ: 10 пикселей; поле: 10 пикселей; граница: 1 пиксель, сплошная #afafaf; радиус границы: 3 пикселя; фон: rgba(255, 255, 255, 0,5); контур: нет; } кнопка { цвет фона: #4CAF50; граница: нет; белый цвет; отступы: 15 пикселей 32 пикселей; выравнивание текста: по центру; текстовое оформление: нет; отображение: встроенный блок; размер шрифта: 16 пикселей; поле: 4 пикселя 2 пикселя; курсор: указатель; } Добавление двух чисел Номер 1:
Номер 2:
Отправить Очистить $(документ).ready(функция(){ $("форма").submit(функция(){ var numb1 = $("#numb1").val(); var numb2 = $("#numb2").val(); var pat=/^[0-9]+$/;//старый ник если(numb1==""){ $("#error").text("Введите значение"); $("#numb1").focus(); вернуть ложь; } если(!numb1.match(пат)){ $("#error").text("Введите число"); $("#numb1").focus(); вернуть ложь; } если(numb2==""){ $("#error").text("Введите значение"); $("#numb2").focus(); вернуть ложь; } если(!numb2.match(пат)){ $("#error").text("Введите число"); $("#numb1").focus(); вернуть ложь; } }); }); функция displayMsg(m){ var r=confirm("Хотите "+m); если (г) { вернуть истину; }еще{ вернуть ложь; } } А вот код form2.php:

тело { переполнение: скрыто; поле: 0 пикселей; отступ: 0 пикселей; семейство шрифтов: Arial, без засечек; фон: #c0c0ff; } #форма { цвет: #000; граница: 0 пикселей, сплошная #afafaf; начертание шрифта: жирный; ширина: 30%; поле слева: 35%; поле сверху: 120 пикселей; выравнивание текста: по центру; отступ: 40 пикселей; отступ-верх: 20 пикселей; радиус границы: 3 пикселя; box-shadow: 0px 0px 8px #777; фон: rgba(255, 255, 255, 255); } вход { цвет: #777; начертание шрифта: жирный; ширина: 70%; отступ: 10 пикселей; поле: 10 пикселей; граница: 1 пиксель, сплошная #afafaf; радиус границы: 3 пикселя; фон: rgba(255, 255, 255, 0,5); контур: нет; } Добавление двух чисел Номер 01:
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Spring Boot Web App обрабатывает неправильные запросы POST после обновления Spring/Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Apache CXF Framework неправильно обрабатывает поставщики, вызывая функции, бросающие веб -serviceException
    Anonymous » » в форуме Apache
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Веб-сервер Python aiohttp не обрабатывает более одного запроса один раз
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • WebClientRequestException при Wiremocking Spring Boot Service Post Post Post
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • WebClientRequestException при Wiremocking Spring Boot Service Post Post Post
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»