我正在尝试编写一个小型 C++ 网络服务器来处理 GET、POST、HEAD 请求。我的问题是我不知道如何解析 header 、消息正文等。它在套接字上监听,我什至可以将内容写到浏览器中,但我很好奇我应该如何在 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' 处拆分请求并修剪它们(如果是的话,如何修剪)? 还有如何处理post数据中的文件?
我想要实现的主要目标是获得一个包含标题键=>值对的 vector 、一个带有请求方法的字符串、发布数据(如在 PHP 中,如果它存在)和查询字符串(例如/index ) 作为由“/”分隔的字符串或 vector 。
谢谢!
最佳答案
自己动手之前先介绍一下Poco :
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);
}
关于c++ - 如何在C++中解析http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179409/