libevent 是一个跨平台的异步事件通知库,它可以被用来建立高性能的网络服务器。你可以使用 libevent 库来接收 form-data,下面是一个简单的示例代码:
#include <event2/http.h>
#include <event2/http_struct.h>
void request_cb(struct evhttp_request *req, void *arg) {
// 获取 form-data 数据
struct evkeyvalq *headers = evhttp_request_get_input_headers(req);
const char *content_type = evhttp_find_header(headers, "Content-Type");
if (content_type && strstr(content_type, "application/x-www-form-urlencoded")) {
// 解析 form-data 数据
struct evkeyval *header;
struct evkeyvalq form_data;
TAILQ_INIT(&form_data);
if (evhttp_parse_query_str(evhttp_request_get_input_buffer(req)->buffer, &form_data) == 0) {
// 遍历 form-data 数据
TAILQ_FOREACH(header, &form_data, next) {
printf("%s: %s\n", header->key, header->value);
}
// 释放内存
evhttp_clear_headers(&form_data);
}
}
// ……
}
int main() {
// ……
struct evhttp *http = evhttp_new(base);
evhttp_set_cb(http, "/path", request_cb, NULL);
// ……
event_base_dispatch(base);
// ……
return 0;
}
需要注意的是,上面的代码假设请求的 Content-Type 是 "application/x-www-form-urlencoded",如果是其他的类型,需要使用相应的解析方法。