如何使用 microhttpd.h 在 C 中读取包含问号的 URL
How to read URLs containing question marks in C using microhttpd.h
我正在尝试使用 microhttpd library
在 C 中解析 URL。
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
,url 值将是 /cars/ferrari
但在 http://128.19.24.123:8888/cars?value=ferrari
的情况下,url 仅打印 cars
。
我要打印 cars?value=ferrari
。我该怎么做?
https://www.gnu.org/software/libmicrohttpd/tutorial.html
上有一个关于 microhttpd 库的教程
但是我在那里找不到解决这个问题的方法。
CAVEAT EMPTOR:我没有使用过这个库,这个答案是基于对 API.
的快速阅读
您似乎无法访问整个原始文件 URL,因为 microhttpd 会为您解析它。相反,您使用 MHD_lookup_connection_value
访问各个查询字符串值,如下所示:
value = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value");
那将 return 一个指向查询字符串参数值的指针,如果找不到则为 null。
您还可以使用 MHD_get_connection_values
遍历查询字符串组件。在那种情况下,您可以这样称呼它:
num = MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, iterator, cls);
迭代器将是一个回调函数,用于逐个接收 GET 查询参数。
另请参阅:手册中的 Handling requests 部分。
我正在尝试使用 microhttpd library
在 C 中解析 URL。
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
,url 值将是 /cars/ferrari
但在 http://128.19.24.123:8888/cars?value=ferrari
的情况下,url 仅打印 cars
。
我要打印 cars?value=ferrari
。我该怎么做?
https://www.gnu.org/software/libmicrohttpd/tutorial.html
上有一个关于 microhttpd 库的教程但是我在那里找不到解决这个问题的方法。
CAVEAT EMPTOR:我没有使用过这个库,这个答案是基于对 API.
的快速阅读您似乎无法访问整个原始文件 URL,因为 microhttpd 会为您解析它。相反,您使用 MHD_lookup_connection_value
访问各个查询字符串值,如下所示:
value = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value");
那将 return 一个指向查询字符串参数值的指针,如果找不到则为 null。
您还可以使用 MHD_get_connection_values
遍历查询字符串组件。在那种情况下,您可以这样称呼它:
num = MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, iterator, cls);
迭代器将是一个回调函数,用于逐个接收 GET 查询参数。
另请参阅:手册中的 Handling requests 部分。