tashaxing / CppHttpDemo

light weight C++ httpserver and httpclient based on mongoose, also support websocket
294 stars 199 forks source link

请问如何在handler 里面处理post请求,没有看到示例代码 #2

Closed Wall-ee closed 5 years ago

Wall-ee commented 5 years ago

请问如何在handler 里面处理post请求,没有看到示例代码

tashaxing commented 5 years ago

有的,看55行和110行 先判断是否url然后判断post类型,接受前端参数然后handle

Wall-ee commented 5 years ago

有的,看55行和110行 先判断是否url然后判断post类型,接受前端参数然后handle

嗯 我在 http_server 看到了代码 。但是有个问题。 我想在 AddHandler 的对象里面编写。但是发现 AddHandler 里面没有

http_message *http_req

这个参数,所以就只能写在http_server的文件里面了。

tashaxing commented 5 years ago

简单,把AddHandler做成回调函数对象,把http_message作为回调参数传出来,就可以handle了,需要一点编程的小技巧

tashaxing commented 5 years ago

一般真正用在项目中的代码不是想这个demo这么写的,都是用回调

用回调函数把需要的参数和网络连接句柄传入传出,就可以把http通信组件和业务逻辑分割

Wall-ee commented 5 years ago

好的 我去试试~大佬能提供2-3行的代码一个小示例吗?感激不尽 我这里C++这一块不太熟悉……

tashaxing commented 5 years ago
// sth like this
void HttpServer::HandleHttpEvent(mg_connection *connection, http_message *http_req, Callback callback)
{
    // use callback to handle the request
    callback(connection, http_req);
}

// write your callback outside
typedef void(mg_connection *connection, http_message *http_req) Callback;

// pass the this callback function to the http event handle function as function pointer
void MyCallback(mg_connection *connection, http_message *http_req)
{
// check http_req

// use connection to send response
}
tashaxing commented 5 years ago

这些都行

Wall-ee commented 5 years ago

ok 另外还有个问题 就是 用 SendHttpRsp(connection, buffer.GetString()) 返回json的时候 中文会乱码。但是 在debug中 看 buffer 的是正常的 内存中的查看结果:

{
    "userInfo": {
        "wxid": "asdfadsfasdf",
        "userName": "阿拉拉了",
        "lalalal": "你好啊"
    }

cout 结果也正常

{
    "userInfo": {
        "wxid": "asdfadsfasdf",
        "userName": "阿拉拉了",
        "lalalal": "你好啊"
    }
}

但是 postman 接受的 返回json却编码不正常

{ "result": {
    "userInfo": {
        "wxid": "asdfadsfasdf",
        "userName": "��������",
        "lalalal": "����ү"
    }
} }

不知道怎么回事

Wall-ee commented 5 years ago

这样写 也不行:

SendHttpRsp(connection, "错误方法");

结果是这个: { "result": ���󷽷� }

Wall-ee commented 5 years ago

问题也定位了 就是 mongoose 这里的代码问题 但是我不知道怎么解决:

    //mg_printf_http_chunk(connection, "{ \"result\": %s }", rsp.c_str());
    mg_printf_http_chunk(connection, rsp.c_str());
tashaxing commented 5 years ago

需要中文转码 试试这个,不是gbk就是utf8 https://blog.csdn.net/u012234115/article/details/83186386

Wall-ee commented 5 years ago

搞定 谢谢啦 windows 加一个 gbktoutf8 即可

Wall-ee commented 5 years ago

啊 post 的cilent 有么有示例?我想写一个发送的客户端~