gpt4 book ai didi

c++ - 如何在C++中解析http请求

转载 作者:可可西里 更新时间:2023-11-01 18:36:01 28 4
gpt4 key购买 nike

我正在尝试编写一个小型 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, &params);
srv.start();
while (true)
Thread::sleep(1000);
}

关于c++ - 如何在C++中解析http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179409/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com