2017-03-17 89 views
0

我想使用microhttpd library解析C中的URL。如何使用microhttpd.h讀取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的URL值將是/cars/ferrari

但在http://128.19.24.123:8888/cars?value=ferrari案件的網址只cars打印。我想打印cars?value=ferrari。我怎樣才能做到這一點?

有一個在https://www.gnu.org/software/libmicrohttpd/tutorial.html

上microhttpd庫中的教程,但我找不到任何解決這個問題的存在。

回答

1

CAVEAT EMPTOR:我還沒有使用這個庫,這個答案是基於快速瀏覽API

看起來你不能訪問整個原始URL,因爲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); 

迭代器將是一個回調函數接收的GET查詢參數,一個接一個。

另請參閱:手冊中的Handling requests部分。