如何在C CGI中读取POST发送的文件?

时间:2013-07-23 15:51:22

标签: c http cgi

我看过多篇关于不同方法的帖子all over Internet,但我仍然找不到合适的答案。

问题:我的CGI应用程序在嵌入式Web服务器中运行,我使用的语言是C,而我正在尝试处理的是使用表单的POST请求发送的文件。

到目前为止,应用程序一直在做所有事情而不使用任何库,但现在我需要添加这个函数,我真的不知道可以使用哪个库来执行此操作。对于这样一个简单的目标而言,从头开始这样做似乎太复杂了。可能不是因为技术含义,而是针对浏览器之间可能出现的偏差。

有关它的任何建议吗?

编辑:我希望能够从浏览器发布文件,我想避免使用多部分内容类型,因为这是开销......

2 个答案:

答案 0 :(得分:2)

要使用<input type="file">在浏览器中上传文件,必须使用enctype="multipart/form-data"。这是不可协商的 - 文件输入根本不能使用默认的表单编码(application/x-www-form-urlencoded)。

如果可以,我强烈建议使用Perl的CGI模块来解析上传内容。但是,如果您完全坚持使用C语言,则可能需要尝试类似https://github.com/iafonov/multipart-parser-c的内容。

答案 1 :(得分:0)

我写过一台服务器就是这样做的。您将从此发布请求中收到的数据包只是数据。它将被格式化为POST,这意味着会有一些信息,如

HTTP:POST 像版本一样的东西 数据:您的数据

您只需扫描,直到看到数据:或表示发布请求的某个标题,然后您复制此数据。这将是你的文件/参数/在帖子中发送的任何内容。它不会在url中(它有自己的标题部分)

编辑:帖子标题示例

 POST /path/script.cgi HTTP/1.0
 From: frog@jmarshall.com
 User-Agent: HTTPTool/1.0
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 32

 home=Mosby&favorite+flavor=flies  -> This is your data (this happens to be arguments home and favoriteflavor