我正在开发嵌入式 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.html
了thttpd
项目,并将其放入/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 错误。
我在这里错过了什么?