如何在没有客户端脚本的情况下让 Web 客户端处理表单以将页面 ID 信息发送到服务器
How to get a web client handling forms to send page ID info to server without client side scripting
我正在编写一个应用程序,它将 运行 在带有 wifi 和网络服务器的微控制器(arduino 或 Raspberry Zero)上,网络服务器可以通过网络浏览器进行配置,无需任何客户端脚本。这将使用一串 HTML 形式,目的是在微控制器上创建一些小文件,微控制器将解释这些文件以执行其任务。
我最初是在 Slackware Linux 系统上编写的,但是当它接近完成时,会将其全部移动到 Raspberry Pi 运行ning 的定制版本 Ubuntu Linux 进行最终调整。
我将 lighttpd 与 mod_fastcgi 和 libfcgi 一起使用,我正在用 C 编写表单处理程序软件。
现在,理想情况下,每个表单返回到服务器的响应将由其由 mod_fcgi 启动的单独的处理程序守护程序处理,但是我无法弄清楚如何配置 fastcgi 以加载多个处理程序守护程序。我的 fcgi.conf 文件在这封信的后面被 link 指向。
我可以接受这个限制,但出现了另一个问题。在只使用一个处理程序时,每个表单顶部的 action="handlerProgram" 字段必须指向那个处理程序,每个表单都是唯一的并且必须以不同方式处理,所以我如何告诉 formsHandler 程序正在处理哪个表单处理?我需要能够在某个地方的每个 HTML 表单中嵌入另一个标签,以便 Web 客户端将其发送回服务器,服务器将通过环境或某种此类机制将其值传递给表单处理程序。有关如何执行此操作的任何线索?请?
彼得。
PS。这是相关配置的 link 和 html 数据。 HTML Problem
也许这些解决方案之一可能会有所帮助:
在html代码中,在action标签中的处理程序名称后添加有关要处理的表单的信息,如:
action="/cgi-bin/handlerProgram/id/of/form/to/handle"
在您的 CGI handlerProgram 中,您的 PATH_INFO
环境变量的值为“/id/of/form/to/handle”。使用它来了解要处理的表单。
在 html 代码中向您的表单添加一个隐藏的输入字段,例如:
<输入类型="hidden"id="form_to_hanlde"值="form_id"/>
只需在您的处理程序中使用 form_to_handle
字段的值即可了解要处理的表单。
Joe Hect 发布了一个完全解决这个问题的答案。
需要为名为 'index.htm' 的表单发送的信息是表单的名称。我使用了操作字段 "ACTION=/formsHandler.fcgi/index.htm",下面是 echo.fcgi 报告的环境返回内容(重命名为 formsHandler.fcgi 以避免更改我的配置中的任何其他内容。)。如果您可以在此页面打乱后破译列表,您将看到所需信息现在出现在许多地方,包括建议的 PATH_INFO。谢谢你,乔。
现在我要做的就是弄清楚如何正确地投票给你。
{
Request number 1
CONTENT_LENGTH: 37
DOCUMENT_ROOT: /home/lighttpd/htdocs
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT: text/html, application/xhtml+xml, */*
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_ACCEPT_LANGUAGE: en-AU
HTTP_CACHE_CONTROL: no-cache
HTTP_CONNECTION: Keep-Alive
HTTP_HOST: 192.168.0.16:6666
HTTP_PRAGMA:
HTTP_RANGE:
HTTP_REFERER: http://192.168.0.16:6666/
HTTP_TE:
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_X_FORWARDED_FOR:
PATH:
PATH_INFO: /index.htm
PATH_TRANSLATED: /home/lighttpd/htdocs/index.htm
QUERY_STRING:
CONTENT_LENGTH: 37
CONTENT:
REMOTE_ADDR: 192.168.0.19
REMOTE_HOST:
REMOTE_PORT: 54159
REQUEST_METHOD: POST
REQUEST_ACTION:
ACTION:
REQUEST_URI: /formsHandler.fcgi/index.htm
REDIRECT_URI:
SCRIPT_FILENAME: /home/lighttpd/htdocs/formsHandler.fcgi
SCRIPT_NAME: /formsHandler.fcgi
SERVER_ADDR: 192.168.0.16
SERVER_ADMIN:
SERVER_NAME: 192.168.0.16
SERVER_PORT: 6666
SERVER_PROTOCOL: HTTP/1.1
SERVER_SIGNATURE:
SERVER_SOFTWARE: lighttpd/1.4.41
}
我正在编写一个应用程序,它将 运行 在带有 wifi 和网络服务器的微控制器(arduino 或 Raspberry Zero)上,网络服务器可以通过网络浏览器进行配置,无需任何客户端脚本。这将使用一串 HTML 形式,目的是在微控制器上创建一些小文件,微控制器将解释这些文件以执行其任务。 我最初是在 Slackware Linux 系统上编写的,但是当它接近完成时,会将其全部移动到 Raspberry Pi 运行ning 的定制版本 Ubuntu Linux 进行最终调整。 我将 lighttpd 与 mod_fastcgi 和 libfcgi 一起使用,我正在用 C 编写表单处理程序软件。 现在,理想情况下,每个表单返回到服务器的响应将由其由 mod_fcgi 启动的单独的处理程序守护程序处理,但是我无法弄清楚如何配置 fastcgi 以加载多个处理程序守护程序。我的 fcgi.conf 文件在这封信的后面被 link 指向。
我可以接受这个限制,但出现了另一个问题。在只使用一个处理程序时,每个表单顶部的 action="handlerProgram" 字段必须指向那个处理程序,每个表单都是唯一的并且必须以不同方式处理,所以我如何告诉 formsHandler 程序正在处理哪个表单处理?我需要能够在某个地方的每个 HTML 表单中嵌入另一个标签,以便 Web 客户端将其发送回服务器,服务器将通过环境或某种此类机制将其值传递给表单处理程序。有关如何执行此操作的任何线索?请? 彼得。 PS。这是相关配置的 link 和 html 数据。 HTML Problem
也许这些解决方案之一可能会有所帮助:
在html代码中,在action标签中的处理程序名称后添加有关要处理的表单的信息,如:
action="/cgi-bin/handlerProgram/id/of/form/to/handle"
在您的 CGI handlerProgram 中,您的 PATH_INFO
环境变量的值为“/id/of/form/to/handle”。使用它来了解要处理的表单。
在 html 代码中向您的表单添加一个隐藏的输入字段,例如:
<输入类型="hidden"id="form_to_hanlde"值="form_id"/>
只需在您的处理程序中使用 form_to_handle
字段的值即可了解要处理的表单。
Joe Hect 发布了一个完全解决这个问题的答案。 需要为名为 'index.htm' 的表单发送的信息是表单的名称。我使用了操作字段 "ACTION=/formsHandler.fcgi/index.htm",下面是 echo.fcgi 报告的环境返回内容(重命名为 formsHandler.fcgi 以避免更改我的配置中的任何其他内容。)。如果您可以在此页面打乱后破译列表,您将看到所需信息现在出现在许多地方,包括建议的 PATH_INFO。谢谢你,乔。 现在我要做的就是弄清楚如何正确地投票给你。
{
Request number 1
CONTENT_LENGTH: 37
DOCUMENT_ROOT: /home/lighttpd/htdocs
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT: text/html, application/xhtml+xml, */*
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_ACCEPT_LANGUAGE: en-AU
HTTP_CACHE_CONTROL: no-cache
HTTP_CONNECTION: Keep-Alive
HTTP_HOST: 192.168.0.16:6666
HTTP_PRAGMA:
HTTP_RANGE:
HTTP_REFERER: http://192.168.0.16:6666/
HTTP_TE:
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_X_FORWARDED_FOR:
PATH:
PATH_INFO: /index.htm
PATH_TRANSLATED: /home/lighttpd/htdocs/index.htm
QUERY_STRING:
CONTENT_LENGTH: 37
CONTENT:
REMOTE_ADDR: 192.168.0.19
REMOTE_HOST:
REMOTE_PORT: 54159
REQUEST_METHOD: POST
REQUEST_ACTION:
ACTION:
REQUEST_URI: /formsHandler.fcgi/index.htm
REDIRECT_URI:
SCRIPT_FILENAME: /home/lighttpd/htdocs/formsHandler.fcgi
SCRIPT_NAME: /formsHandler.fcgi
SERVER_ADDR: 192.168.0.16
SERVER_ADMIN:
SERVER_NAME: 192.168.0.16
SERVER_PORT: 6666
SERVER_PROTOCOL: HTTP/1.1
SERVER_SIGNATURE:
SERVER_SOFTWARE: lighttpd/1.4.41
}