我正在尝试编写一个小型 C++ Web 服务器来处理 GET、POST、HEAD 请求。我的问题是我不知道如何解析标头、消息正文等。它正在监听套接字,我什至可以将内容写入浏览器,但我很好奇我应该如何在 C++ 中执行此操作。
据我所知,标准的 GET/POST 请求应该如下所示:
GET /index HTTP/1.1
Host: 192.168.0.199:80
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
this is the message body
所有行均以“\r\n”结尾。
我应该在“\n”处拆分请求并修剪它们(如果是的话如何修剪)?
另外如何处理帖子数据中的文件?
我想要实现的主要目标是获取一个包含标头 key=>value 对的向量、带有请求方法的字符串、发布数据(如在 PHP 中,如果存在的话)和查询字符串(例如 /index)作为字符串或由“/”分割的向量。
Thanks!
在你自己做所有事情之前,我先介绍一下你Poco https://pocoproject.org/:
class MyHTTPRequestHandler : public HTTPRequestHandler
{
public:
virtual void handleRequest(HTTPServerRequest & request,
HTTPServerResponse & response) {
// Write your HTML response in res object
}
};
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
MyHTTPRequestHandler handler;
public:
MyRequestHandlerFactory(){}
HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request)
{
const string method = request.getMethod();
if (method == "get" || method == "post")
return &handler;
return 0;
}
};
int main()
{
HTTPServerParams params;
params.setMaxQueued(100);
params.setMaxThreads(16);
ServerSocket svs(80);
MyRequestHandlerFactory factory;
HTTPServer srv(&factory, svs, ¶ms);
srv.start();
while (true)
Thread::sleep(1000);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)