如何使用curl 验证/测试POST 操作到thttpd?

如何使用curl 验证/测试POST 操作到thttpd?

我正在开发嵌入式 Linux 系统(kernel-5.10)。我thttpd在我的系统中设置了一个网络服务器,并想用curl实用程序来测试它。

如下/etc/thttpd.conf

dir=/var/www/data
cgipat=**.cgi
logfile=/var/www/logs/thttpd_log
pidfile=/var/run/thttpd.pid

我复制index.htmlthttpd项目,并将其放入/var/www/data.

我已经验证 HTTPGET操作可以与curl -O http://192.168.0.22/index.html.
现在我想用 验证/测试 HTTPPOST操作curl,例如将文件上传到 HTTP 服务器,但我不知道应该做什么来设置和执行验证。

以下命令出现错误,

# curl -XPOST -d b=@/1.text 192.168.0.22
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

  <head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <title>501 Not Implemented</title>
  </head>

  <body bgcolor="#cc9999" text="#000000" link="#2020ff" vlink="#4040cc">

    <h2>501 Not Implemented</h2>
The requested method 'POST' is not implemented by this server.
    <hr>

    <address><a href="http://www.acme.com/software/thttpd/">thttpd/2.29 23May2018</a></address>

  </body>

</html>

更新了 C-CGI 测试

感谢 Jim,我用 C 语言做了如下测试。

首先,我得到了一个简单的 C 程序:hello.cgi程序https://blog.csdn.net/Zhu_Zhu_2009/article/details/87797884,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
  char *szGet = NULL;
  char szPost[256] = {0};

  printf("Content-type:text/html\n\n");

  szGet = getenv("QUERY_STRING");
  if (szGet != NULL && strlen(szGet) > 0) {
    printf("%s\n", szGet);
    return 0;
  }
  printf("get--post\n");  

  gets(szPost);
  if(strcmp(szPost, "") != 0)
    printf("%s\n",szPost);

  return 0;
}

然后,我更新index.html如下,

<html>
        <head>
                <title>Test</title>
        </head>
        <body>
                <form action="hello.cgi" method="post">
                        <input type="text" name="theText">
                        <input type="submit" value="Continue">
                </form>
        </body>
</html>

重新启动后thttpd,我可以通过网络浏览器访问嵌入式系统。我在浏览器中输入了一些文本并单击continue按钮,我在浏览器中得到了以下内容。

get-post theText=Hello world

所以我思考邮政工作正常?

然后我尝试了curl -XPOST -d b=@/1.text 192.168.0.22,但仍然遇到相同的 501 错误。

我在这里错过了什么?

相关内容