【问题标题】:How to get a web client handling forms to send page ID info to server without client side scripting如何让 Web 客户端处理表单以在没有客户端脚本的情况下将页面 ID 信息发送到服务器
【发布时间】:2017-01-06 05:21:29
【问题描述】:

我正在编写一个应用程序,它将在具有 wifi 和 Web 服务器的微控制器(arduino 或 Raspberry Zero)上运行,该服务器可由 Web 浏览器配置,无需任何客户端脚本。这将使用一串 HTML 表单来在微控制器上创建一些小文件,这些文件将由微控制器解释以执行其任务。 我最初是在 Slackware Linux 系统上编写它,但当它接近完成时,会将其全部转移到运行定制版本的 Ubuntu Linux 的 Raspberry Pi 上以进行最终调整。 我将 lighttpd 与 mod_fastcgi 和 libfcgi 一起使用,我正在用 C 语言编写表单处理程序软件。 现在,理想情况下,每个表单返回到服务器的响应将由 mod_fcgi 启动的其单独的处理程序守护程序处理,但是我无法弄清楚如何配置 fastcgi 以加载多个处理程序守护程序。我的 fcgi.conf 文件在本邮件后面的链接中指向。

我可以忍受这个限制,但出现了另一个问题。在只使用一个处理程序时,每个表单顶部的 action="handlerProgram" 字段必须指向那个处理程序,每个表单都是唯一的并且必须以不同方式处理,那么我如何告诉 formsHandler 程序正在处理哪个表单?我需要能够在某处将另一个标签嵌入到每个 HTML 表单中,以便 Web 客户端将其发送回服务器,服务器将通过环境或某种此类机制将其值传递给表单处理程序。关于如何做到这一点的任何线索?请? 彼得。 PS。这是相关配置和 html 数据的链接。 HTML Problem

【问题讨论】:

    标签: html c linux forms fastcgi


    【解决方案1】:

    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
    }
    

    【讨论】:

      【解决方案2】:

      也许这些解决方案之一可能会有所帮助:

      1. 在html代码中,在action标签的handler程序名后面添加要处理的表单信息,如:

        action="/cgi-bin/handlerProgram/id/of/form/to/handle"

      在 CGI handlerProgram 中,PATH_INFO 环境变量的值是“/id/of/form/to/handle”。用它来知道要处理什么形式。

      1. 在 html 代码中,向您的表单添加一个隐藏的输入字段,例如:

      只需在您的 handlerProgram 中使用 form_to_handle 字段的值即可知道要处理的表单。

      【讨论】:

      • 对不起,乔。当我使用 ptr = getenv("PATH_INFO"); 时,ptr 为 NULL。一些文档说 ???_REFERER (我不记得那个变量名的开头)应该在完整 URL 的末尾包含 ACTION 字段的内容,但我只得到一个 IP 和端口号。
      • Joe,我刚刚仔细查看了您的评论,终于明白了您的意思,您是说我必须将我想要发送的信息添加到名称的末尾我的处理程序。好的,我睡了一会儿再试试,告诉你。
      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多