美文网首页C++
Mongoose搭建RESTful http/https web

Mongoose搭建RESTful http/https web

作者: SK木眠 | 来源:发表于2018-07-19 16:37 被阅读2次

    具体过程就不说了,mongoose很小巧,只有两个文件mongoose.h/cpp,拿来就可以用,并且官方文档包括example也相当的丰富,可以去官网或者GitHub上浏览下载,摘几个相关的:
    A. simplest http server
    B. RESTful server
    C. simplest https server
    D. multi-thread server


    实际上mongoose的注释也很贴心了,文档或demo中没有提及到去mongoose.h里面仔细找找基本都能解决,说几个自用时的一点注意事项:

    • 关于结构体mg_serve_http_opts,它是demo中常用在事件处理回调函数中的
    void mg_serve_http(struct mg_connection *nc, struct http_message *hm, struct mg_serve_http_opts opts);
    

    函数主要参数,决定了server如何回应client请求,包括回复内容、显示格式、权限控制等等许多选项,如果有需要可以仔细阅读该结构体相关代码与注释;

    • 在做RESTful server API的时候,难免要根据请求来订制响应方式,这里应该注意mongoose提供的mg_*_send_*mg_*_printf_*系列函数,根据实际需要来酌情选择:
    void mg_send(struct mg_connection *, const void *buf, int len);
    int mg_printf(struct mg_connection *, const char *fmt, ...);
    void mg_printf_http_chunk(struct mg_connection *nc, const char *fmt, ...);
    void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len);
    void mg_send_response_line(struct mg_connection *nc, int status_code,
                               const char *extra_headers);
    void mg_http_send_error(struct mg_connection *nc, int code, const char *reason);
    void mg_http_send_redirect(struct mg_connection *nc, int status_code,
                               const struct mg_str location,
                               const struct mg_str extra_headers);
    void mg_send_head(struct mg_connection *n, int status_code,
                      int64_t content_length, const char *extra_headers);
    
    • 在搭建https server的时候,需要用到SSL相关功能,首先要在mongoose.h头文件开始加上相关宏定义启用SSL支持,配置好OpenSSL头文件include路径(我的在D:\Code\openssl\inc32,mongoose中的OpenSSL头文件包含方式都是#include <openssl/...>),并导入OpenSSL静态库:
    #define MG_ENABLE_SSL 1
    #pragma comment(lib,"./openssl/libeay32.lib")
    #pragma comment(lib,"./openssl/ssleay32.lib")
    

    然后在调用

    struct mg_connection *mg_bind_opt(struct mg_mgr *mgr, const char *address,
                                      MG_CB(mg_event_handler_t handler,
                                            void *user_data),
                                      struct mg_bind_opts opts);
    

    创建mg_connection对象的时候,通过mg_bind_opts参数的成员ssl_certssl_key分别导入服务器公钥(证书)和服务器私钥。
    至于如何获取证书,一般来说在不必要第三方CA的情况下常采用自签名证书的方式,具体步骤可以参见上一篇博客:OpenSSL生成HTTPS自签名证书

    相关文章

      网友评论

        本文标题:Mongoose搭建RESTful http/https web

        本文链接:https://www.haomeiwen.com/subject/zwdtmftx.html