如何处理 CGI 中 POST 请求中的 0 内容长度
How to handle 0 Content length in POST request in CGI?
在我的CGI应用程序中,当我传递0内容长度的POST请求时会发生一些事情。这是我的代码:
char* len_ = getenv("CONTENT_LENGTH");
char* type_ = getenv("REQUEST_METHOD");
if(len_ != NULL)
{
// The code crashes somewhere here
long int len = strtol(len_, NULL, 10);
char* postdata = (char*)malloc(len + 1);
if (!postdata) { exit(EXIT_FAILURE); }
//fgets(postdata, len + 1, stdin);
string temp = "";
fstream ff;
string fileName = string(XML_DATA_DIRECTORY) + string("data.xml");
ff.open(fileName.c_str(), ios::in | ios::out | ios::trunc);
// ff.open(fileName.c_str());
if(ff)
{
// Modified: To handle new line in the Xml request
while(fgets(postdata, len + 1, stdin) != NULL)
{
temp.append(postdata);
}
ff << temp;
}
else
{
// Error on the ifstream
}
ff.close();
//free(postdata);
}
else
{
// No Data
}
我使用 Firefox 的 Http-Requester 插件测试我的应用程序,当我传递一个没有数据的 POST 请求时,应用程序似乎进入了一个循环并且没有响应。如果我传递一个 GET 请求,代码工作正常,因为len_
变为 NULL 并退出 if 语句。如果我传递带有数据的 POST 请求,它工作正常并且可以很好地接收数据并保存它。
我无法弄清楚的情况是 POST CONTENT_LENGTH = 0。如何计算这种情况?我尝试了strlen(len_)
但没有用。感谢您的帮助。
检查getenv
是否返回NULL
,例如:
char* len_;
long int len;
len_ = getenv("CONTENT_LENGTH");
if (len_ && sscanf(len_, "%ld", &len) == 1) {
if (len > 0) {
...
}
}
请注意,(如@Deduplicator所指出的)最好将len
声明为 unsigned long
或size_t
,因为CONTENT_LENGTH
(客户端发送的字节数)始终为正数。
相关文章:
- 如何使用boost/beast从HTTP POST请求中解析和提取有效负载?
- 如何使用 curl 将 POST 请求从 python 重写为 C++
- 从简单的 POST 请求中解析异常
- 使用 cpp-httplib 的 POST 请求
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- C++中的 cURL POST 请求
- C++ Schannel POST 400 错误代码错误请求
- c++curl返回413请求实体过大,但是post大小远小于max大小
- HTTP POST 请求不允许我定义上下文类型
- 如何在c++中使用libcurl发送POST请求并接收它
- 我想将 POST 请求从 arduino 发送到 mysql 工作台并保存值
- 如何捕获从 MFC Web 浏览器 c++ 发出的 GET/POST 请求
- 如何解决来自 arduino 的 post 请求的问题,在失败之前只收到 2-3 次
- C HTTP POST 400不良请求
- 使用 restbed C++发送 POST 多部分/表单数据请求
- C++ 对 nodejs 服务器的 POST 请求失败(基于套接字)
- Qt Post请求正在执行但失败
- 使用C REST SDK(Casablanca)的HTTP_CLIENT POST请求
- 使用CPP手动构建POST请求,并使用它提交php表单
- 如何在 qt main() 中运行 post 请求