Управление контроллером TXT через веб страницу

Обсуждаем модели и конструкции, построенные своими руками
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Управление контроллером TXT через веб страницу

Сообщение Mr.Kubikus »

Muaed писал(а):
22 дек 2021, 09:18
Html файл нормально запускается.
При отправке данных из формы возвращается текст исходника обработчика.
Где я допускаю ошибку?
Веб сервер не запускает *.py файлы.
Ваш веб-сервер не запускает файл-обработчик CGI т.к. в вашем коде объект handler создан из класса SimpleHTTPRequestHandler, который не умеет обрабатывать CGI-запросы. Вам надо использовать класс CGIHTTPRequestHandler.

Мой код сервера, который поддерживает CGI. Файл cgi-form-simple-server.py:

Код: Выделить всё

import http.server

PORT = 8000

handler = http.server.CGIHTTPRequestHandler
server = http.server.HTTPServer(("0.0.0.0", PORT), handler)
print(f'HTTP Server Running at port {PORT}...')
server.serve_forever()
Файл-обработчик CGI должен находиться в папке cgi-bin внутри папки проекта. Также надо разрешить исполнение файла обработчика для пользователя ROBOPro:

Код: Выделить всё

chmod u+x <имя файла обработчика>
Еще рекомендую в ответе сервера передавать тип кодировки UTF-8. Файл-обработчик cgi-form.py:

Код: Выделить всё

#!/usr/bin/env python3

import cgi

our_form = cgi.FieldStorage()

field_left = our_form.getfirst("left", "не задано")
field_right = our_form.getfirst("right", "не задано")

print("Content-type: text/html;charset=utf-8")
print()
print(f"<p>left = {field_left}</p>")
print(f"<p>right = {field_right}</p>")
print(f'<a href="/">Назад</a>')
Файл index.html:

Код: Выделить всё

<html>
<body>
<form action="cgi-bin/cgi-form.py" >
    <input type="text" name="left"><br />
    <input type="text" name="right"><br />
    <p><input type="submit"></p>
</form>
</body>
</html>
Структура папки с проектом:

Код: Выделить всё

$  tree cgi-form-simple

├── cgi-form-simple-server.py
├── index.html
└── cgi-bin
    └── cgi-form.py
С уважением, Григорий
GitHub FB ВК
Muaed
Сообщения: 38
Зарегистрирован: 19 окт 2021, 12:38

Re: Управление контроллером TXT через веб страницу

Сообщение Muaed »

Нет изменении. Возвращает в виде текста исходник обработчика.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Управление контроллером TXT через веб страницу

Сообщение Mr.Kubikus »

Проверьте, пожалуйста, используете ли вы класс CGIHTTPRequestHandler в своём сервере. Покажите ваше код.
С уважением, Григорий
GitHub FB ВК
Muaed
Сообщения: 38
Зарегистрирован: 19 окт 2021, 12:38

Re: Управление контроллером TXT через веб страницу

Сообщение Muaed »

Я использовал тот код который в рекомендовали.

Код: Выделить всё

import http.server

PORT = 8000

handler = http.server.CGIHTTPRequestHandler
server = http.server.HTTPServer(("0.0.0.0", PORT), handler)
print(f'HTTP Server Running at port {PORT}...')
server.serve_forever()



Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Управление контроллером TXT через веб страницу

Сообщение Mr.Kubikus »

Есть еще вероятность, что браузер показываeт вам страницу из собственного кеша. Обновите страницу с помощью Ctrl+F5.

Пришлите, пожалуйста, журнал, который выводится на консоль во время выполнения запросов из браузера. У меня так:

Код: Выделить всё

$ python cgi-form-simple-server.py
HTTP Server Running at port 8000...
192.168.7.1 - - [22/Dec/2021 17:01:19] "GET / HTTP/1.1" 200 -
192.168.7.1 - - [22/Dec/2021 17:01:19] code 404, message File not found
192.168.7.1 - - [22/Dec/2021 17:01:19] "GET /favicon.ico HTTP/1.1" 404 -
192.168.7.1 - - [22/Dec/2021 17:01:42] "GET /cgi-bin/cgi-form.py?left=123&right=abc HTTP/1.1" 200 -
192.168.7.1 - - [22/Dec/2021 17:01:57] "GET / HTTP/1.1" 304 -
С уважением, Григорий
GitHub FB ВК
Muaed
Сообщения: 38
Зарегистрирован: 19 окт 2021, 12:38

Re: Управление контроллером TXT через веб страницу

Сообщение Muaed »

Код: Выделить всё

$ python cgi-form-simple-server.py
HTTP Server Running at port 8000...
192.168.7.1 - - [01/Jan/2000 01:03:50] "GET / HTTP/1.1" 200 -
192.168.7.1 - - [01/Jan/2000 01:03:57] "GET /forma0.html HTTP/1.1" 200 -
192.168.7.1 - - [01/Jan/2000 01:04:05] "GET /cgi-bin/cgi-form.py?left=234&right=123 HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('192.168.7.1', 63406)
Traceback (most recent call last):
  File "/usr/lib/python3.8/http/server.py", line 1179, in run_cgi
OSError: [Errno 8] Exec format error: '/opt/knobloch/Python/cgi-bin/cgi-form.py'
----------------------------------------
192.168.7.1 - - [01/Jan/2000 01:04:06] CGI script exit status 0x7f00
192.168.7.1 - - [01/Jan/2000 01:04:14] "GET /cgi-bin/cgi-form.py?left=234&right=123 HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('192.168.7.1', 63408)
Traceback (most recent call last):
  File "/usr/lib/python3.8/http/server.py", line 1179, in run_cgi
OSError: [Errno 8] Exec format error: '/opt/knobloch/Python/cgi-bin/cgi-form.py'
----------------------------------------
192.168.7.1 - - [01/Jan/2000 01:04:14] CGI script exit status 0x7f00
Выполнения запросов из браузера
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Управление контроллером TXT через веб страницу

Сообщение Mr.Kubikus »

Добрый день!

Я воспроизвел вашу ошибку у себя. Похоже, что в вашем файле cgi-form.py не хватает строки в самом начале скрипта:

Код: Выделить всё

#!/usr/bin/env python3
Эта строка в скрипте нужна для того чтобы указать точное имя программы-интерпретатора, которая будет выполнять код в файле обработчика cgi-form.py. В нашем случае - это python3.

Кстати, последовательность из символов решётки и восклицательного знака ("#!") в начале файла скрипта называется Шебанг (Shebang).
С уважением, Григорий
GitHub FB ВК
Muaed
Сообщения: 38
Зарегистрирован: 19 окт 2021, 12:38

Re: Управление контроллером TXT через веб страницу

Сообщение Muaed »

Проверил. Все в норме есть такая строка. Но все равно не работает.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Управление контроллером TXT через веб страницу

Сообщение Mr.Kubikus »

Я упаковал весь проект в архив. Скопируйте его в контроллер в папку /opt/knobloch, распакуйте и запустите:

Код: Выделить всё

tar xzvof cgi-form-simple.tgz
cd cgi-form-simple
python3 cgi-form-simple-server.py
Что выводится в консоль после запуска сервера?

Скопировать архив из Windows в TXT можно командой:

Код: Выделить всё

scp cgi-form-simple.tgz ROBOPro@192.168.7.2:/opt/knobloch
или с помощью клиента winscp.
Вложения
cgi-form-simple.tgz
(652 байт) 667 скачиваний
С уважением, Григорий
GitHub FB ВК
Muaed
Сообщения: 38
Зарегистрирован: 19 окт 2021, 12:38

Re: Управление контроллером TXT через веб страницу

Сообщение Muaed »

Код: Выделить всё

$ tar xzvof cgi-form-simple.tgz
./cgi-form-simple/
./cgi-form-simple/cgi-bin/
./cgi-form-simple/cgi-bin/cgi-form.py
./cgi-form-simple/index.html
./cgi-form-simple/cgi-form-simple-server.py
$ cd cgi-form-simple
$ python3 cgi-form-simple-server.py
Traceback (most recent call last):
  File "cgi-form-simple-server.py", line 6, in <module>
    server = http.server.HTTPServer(("0.0.0.0", PORT), handler)
  File "/usr/lib/python3.8/socketserver.py", line 452, in __init__
  File "/usr/lib/python3.8/http/server.py", line 138, in server_bind
  File "/usr/lib/python3.8/socketserver.py", line 466, in server_bind
OSError: [Errno 98] Address already in use



Ответить