如何使用Mongoose(一个http服务器)来提供不同的请求?

时间:2014-08-08 03:41:07

标签: c++ c linux http mongoose-web-server

我是http的新手,我正在使用名为mongoose的嵌入式http服务器 在〜/ web_root中使用web根目录,我想这样做:

if uri == "/hello"
    show "hello world"
else
    show the file in web_root like index.html

我试着像这样使用猫鼬

  struct mg_server *server;
  server = mg_create_server(p, HttpEventHandler);
  mg_set_option(server, "document_root", "~/web_root");
  mg_set_option(server, "listening_port", "8080");

  for(;;)
    mg_poll_server(server, 1000);

这是HttpEvenHandler

int HttpEventHandler(struct mg_connection *conn, mg_event ev) {
  if(ev == MG_AUTH)
    return MG_TRUE;
  else if(ev == MG_REQUEST) {
    if(strcmp("/hello", conn->uri) == 0) {
      mg_printf_data(conn, "%s\n", "hello world");
    }
    return MG_TRUE;
  }

// I don't know what to write here

 return MG_FALSE;
}

3 个答案:

答案 0 :(得分:0)

这真的是你想要达到的目标吗?

The document表示您可以通过-cgi_pattern /cgi-bin/*.cgi等命令行选项配置哪些URI被识别为CGI调用。

然后你只需要放一个名为hello的CGI可执行文件,在"hello world"下输出~/web_root并告诉Mongoose服务器将其用作唯一可能的CGI:-cgi_pattern /hello$ (虽然我没有亲自测试过)

答案 1 :(得分:0)

  else if(ev == MG_REQUEST) {
    if(strcmp("/hello", conn->uri) == 0) {
      mg_printf_data(conn, "%s\n", "hello world");
      return MG_TRUE;
    }
    return MG_FALSE;  // Let Mongoose serve the request
  }

另外,我认为这不会起作用:

mg_set_option(server, "document_root", "~/web_root");

指定完整路径,例如/home/joe/web_root

答案 2 :(得分:0)

嗯,似乎 mg_set_option() 无处可寻(7.3 版)。

用于设置 Web 根目录的正确 API 调用是:mg_http_serve_dir( connection, http_event_object, options);

最后一个参数 "options" 有一个成员 mg_http_serve_opts::root_dir。这将是指定用于服务的 Web 根目录的方法。

从设计的角度来看,这种最近的方法更加灵活,允许基于不同的端点提供不同的目录。