您的位置:首页 > 房产 > 家装 > 政务服务网登录入口_百度网址大全旧版安装_南京seo排名优化_种子搜索神器在线搜

政务服务网登录入口_百度网址大全旧版安装_南京seo排名优化_种子搜索神器在线搜

2024/10/7 4:22:45 来源:https://blog.csdn.net/qq_37281656/article/details/142255069  浏览:    关键词:政务服务网登录入口_百度网址大全旧版安装_南京seo排名优化_种子搜索神器在线搜
政务服务网登录入口_百度网址大全旧版安装_南京seo排名优化_种子搜索神器在线搜

目录

  • 0.CGI程序主要干什么?
  • 1.数据处理
  • 2.任务处理


0.CGI程序主要干什么?

  • CGI数据处理主要由外部CGI程序负责,HttpServer只负责将拿到的参数交给CGI程序
    • 即:CGI程序既需要数据处理又需要任务处理,最后将结果传递回HttpServer
  • 本质上就是给一个某个功能的软件,套上了一层壳
    • 解析HttpServer传递的参数
    • 实现某个功能
    • 将结果传递回HttpServer

1.数据处理

  • 数据处理,主要体现在解析参数
  • 此处举个简单的例子
bool GetQuery(std::string& out)
{std::string method = getenv("METHOD");bool ret = false;if (method == "GET"){out = getenv("ARG");ret = true;}else if (method == "POST"){// CGI如何得知需要从标准输入读取多少字节呢?int content_length = atoi(getenv("CLENGTH"));char ch = 'K';while (content_length--){read(0, &ch, 1);out.push_back(ch);}ret = true;}else{// Do Nothing}return ret;
}void CutString(const std::string& in, std::string& out1, std::string& out2, const std::string sep)
{auto pos = in.find(sep);if(pos != std::string::npos){out1 = in.substr(0, pos);out2 = in.substr(pos + sep.size());}
}

2.任务处理

  • 将解析出来的参数,用于任务处理,处理什么任务,就需要看具体场景,写具体代码了
  • 此处以一个简易计算器为例
int main()
{// 此时子进程标准输出已经重定向,想看打印只能从标准错误输出 #27 // TODOstd::string queryStr;GetQuery(queryStr);// Test Code:x=100&y=200std::string arg1, arg2;CutString(queryStr, arg1, arg2, "&");std::string key1, value1, key2, value2;CutString(arg1, key1, value1, "=");CutString(arg2, key2, value2, "=");// 1 -> 数据给父进程std::cout << key1 << ":" << value1 << endl;std::cout << key2 << ":" << value2 << endl;// 2 -> DEBUG,输出到命令行std::cerr << "CGI: " << key1 << ":" << value1 << endl;std::cerr << "CGI: " << key2 << ":" << value2 << endl;int x = atoi(value1.c_str());int y = atoi(value2.c_str());// 可能想进行某种计算(搜索、登陆等),想进行某种存储(注册)std::cout << "<html>";std::cout << "<head><meta charset=\"utf-8\"></head>";std::cout << "<body>";std::cout << "<h3> " << value1 << " + " << value2 << " = " << x + y << "</h3>";std::cout << "<h3> " << value1 << " - " << value2 << " = " << x - y << "</h3>";std::cout << "<h3> " << value1 << " * " << value2 << " = " << x * y << "</h3>";std::cout << "<h3> " << value1 << " / " << value2 << " = " << x / y << "</h3>";std::cout << "</body>";std::cout << "</html>";return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com