我正在尝试使用microhttpd library
解析C中的网址。
daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL, PORT, NULL, NULL, &answer_to_connection, NULL, MHD_OPTION_HTTPS_MEM_KEY, key_pem, MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END);
当我运行函数MHD_start_daemon
时,将调用回调函数answer_to_connection
。
static int answer_to_connection(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls)
{
printf("URL:%s\n", url);
}
answer_to_connection
的其中一个参数是const char *url
。 url变量包含https://localhost:port
示例后的字符串:对于http://128.19.24.123:8888/cars/ferrari
,网址值为/cars/ferrari
但如果http://128.19.24.123:8888/cars?value=ferrari
,则网址仅打印cars
。
我想打印cars?value=ferrari
。我怎么能这样做?
在https://www.gnu.org/software/libmicrohttpd/tutorial.html
上有一个关于microhttpd库的教程但我找不到任何解决方案。
答案 0 :(得分:1)
CAVEAT EMPTOR:我没有使用过这个库,这个答案是基于API的快速阅读。
看起来您无法访问整个原始网址,因为microhttpd会为您解析它。而是使用MHD_lookup_connection_value
访问单个查询字符串值,如下所示:
value = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value");
这将返回指向查询字符串参数值的指针,如果未找到则返回null。
您还可以使用MHD_get_connection_values
迭代查询字符串组件。在这种情况下,你会这样称呼它:
num = MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, iterator, cls);
iterator将是一个回调函数,用于逐个接收GET查询参数。
另请参阅:手册中的Handling requests部分。