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

标签 c++ parsing http

我正在尝试编写一个小型 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/

相关文章:

android - 在 Android 中创建服务的最佳方法是什么?

c++ - 代码没有错误,但在命令提示符下什么都不做

java - 解析文件并按属性对行进行排序

java - Android HttpGet 请求未发送

java - SAX XML解析添加参数

javascript - 日历上的重复事件 : RFC 5545 Javascript parsing

http - Node.JS 中的基本 HTTP 身份验证?

c++ - reinterpret_cast 使 constexpr 函数失败

c++ - 可嵌入公式解释器

c++ - 指向接受函数指针的函数的函数指针