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_var
不mg_get_var
int size = 1024, ret;
char *buffer = new char[size];
mg_get_http_var(nc, "fname", buffer, size);