Mongoose C ++:如何使用mongoose解析HTTP GET或POST请求?

时间:2017-06-21 20:19:45

标签: html post visual-c++ mongoose-web-server

我正在尝试创建一个简单的基于c ++ web的GUI。我对使用基于Qt或Visual Studio的GUI不感兴趣。我对网络很感兴趣,因为我的要求非常简单和基本。

所以我遇到了“Mongoose”这个基于C的Web服务器。在完成这些示例之后,我编写了一些代码,但由于我几乎没有关于互联网编程的知识,所以它不起作用。我想知道你们是否有一个简单的例子,我可以使用POST或GET请求从HTML表单中检索用户数据。

以下是我目前管理的内容:

//////   
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "mongoose.h"

static const char *s_http_port = "8000";
volatile bool kill_server = FALSE;
struct mg_mgr mgr;
struct mg_connection *nc;
bool control1_triggered = FALSE;
bool control2_triggered = FALSE;

struct file_writer_data {
    FILE *fp;
    size_t bytes_written;
};


static void handle_upload(struct mg_connection *nc, int ev, void *p) {
    printf("Signal received! %d\n", ev);
    control1_triggered = TRUE;

    struct mg_http_multipart_part *mp = (struct mg_http_multipart_part *) p;

    printf(mp->data.p);
    switch (ev) {
    case MG_EV_HTTP_PART_DATA:


        break;
    }

}

static void handle_upload2(struct mg_connection *nc, int ev, void *p) {
    printf("Signal received@2! %d\n", ev);
    control2_triggered = TRUE;

}

void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
    (void)ev_data;

    switch (ev) {
    case MG_EV_HTTP_REQUEST:
        // Invoked when the full HTTP request is in the buffer (including body).
        mg_printf(nc, "%s",
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html\r\n"
            "Connection: close\r\n"
            "\r\n"
            "<html><body>Controls"


            "<form method=\"GET\" action=\"/upload\" "
            "  enctype=\"multipart/form-data\">"
            "<input type = \"text\" name = \"fname\" value = \"John\">"

            "<input type=\"submit\" value=\"Fix Position\"  />"
            "</form>"

            "<form method=\"POST\" action=\"/Kill\" "
            "  enctype=\"multipart/form-data\">"

            "<input type=\"submit\" value=\"Kill Server\"  />"
            "</form>"
            "input.search{width: 20em;  height: 2em;}"
            "</body></html>");
        nc->flags |= MG_F_SEND_AND_CLOSE;
        break;

    }


}

int main() {


    mg_mgr_init(&mgr, NULL);
    nc = mg_bind(&mgr, s_http_port, ev_handler);

    mg_register_http_endpoint(nc, "/upload", handle_upload);
    mg_register_http_endpoint(nc, "/Kill", handle_upload2);
    // Set up HTTP server parameters
    mg_set_protocol_http_websocket(nc);
    while (1);

    return 0;

}

请注意我已经在Google上搜索了大约3天,已经看到了大部分的链接和问题。但对Mongoose的支持并不多 你能帮我一个关于如何使用Mongoose解析GET或POST HTML请求的例子吗?

非常感谢你。

干杯, 阿维

1 个答案:

答案 0 :(得分:1)

您可以访问nc->content的帖子数据,以获得您使用mg_get_var(nc, size of nc, "fname", buffer, size of buffer)的特定值。

示例:

int size = 1024, ret;
char *buffer = new char[size];
mg_get_var(nc, sizeof(nc), "fname", buffer, size);

旁注Gregwar为Mongoose制作了一个C ++包装器,它是一个旧版本(大约四年),但它可能有所帮助,link

编辑:

方法应为mg_get_http_var而不是mg_get_var

int size = 1024, ret;
char *buffer = new char[size];
mg_get_http_var(nc, "fname", buffer, size);

Link