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

问题描述:

我想创建一个简单的C++基于Web的GUI。我对使用基于Qt或Visual Studio的GUI不感兴趣。因为我的要求是非常简单和基本的,所以我对基于web的感兴趣。Mongoose C++:如何使用猫鼬解析HTTP GET或POST请求?

所以我碰到了基于C的web服务器“Mongoose”。在通过例子之后,我编写了一些代码,但它不起作用,因为我几乎没有关于互联网编程的知识。我想知道您是否有一个简单的例子,我可以使用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 [email protected]! %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; 

} 

请注意,我一直在谷歌上搜索,现在3天左右,所见到的大多数环节和问题。但是对Mongoose的支持不是很多 请帮助我一个关于如何使用Mongoose解析GET或POST HTML请求的例子吗?

非常感谢。

干杯, 阿维从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取得了C++包装的猫鼬,其旧版本(大约是4年),但它可能会帮助,link

编辑:

方法应该是mg_get_http_varmg_get_var

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

Link