使用 libevent 做 HTTP 请求。我想在服务器响应中打印所有 HTTP header ,但不确定如何。
static void http_request_done(struct evhttp_request *req, void *ctx) {
//how do I print out all the http headers in the server response
}
evhttp_request_new(http_request_done,NULL);
我知道我可以获得如下所示的单个 header ,但我如何获得所有 header ?
static void http_request_done(struct evhttp_request *req, void *ctx) {
struct evkeyvalq * kv = evhttp_request_get_input_headers(req);
printf("%s\n", evhttp_find_header(kv, "SetCookie"));
}
谢谢。
最佳答案
虽然我之前没有任何使用 libevent
的经验库,我很清楚 API 不提供此类功能(请参阅其 API 以供引用)。但是,您可以使用 TAILQ_FOREACH
编写自己的方法。内部宏,在 event-internal.h
中定义. evhttp_find_header
的定义相当简单:
const char *
evhttp_find_header(const struct evkeyvalq *headers, const char *key)
{
struct evkeyval *header;
TAILQ_FOREACH(header, headers, next) {
if (evutil_ascii_strcasecmp(header->key, key) == 0)
return (header->value);
}
return (NULL);
}
而不是做 evutil_ascii_strcasecmp
你可以简单地获得 header->key
或 header->value
来自 evkeyval
的条目结构(在 include/event2/keyvalq_struct.h
中定义):
/*
* Key-Value pairs. Can be used for HTTP headers but also for
* query argument parsing.
*/
struct evkeyval {
TAILQ_ENTRY(evkeyval) next;
char *key;
char *value;
};
关于c - 从 libevent 中的 HTTP 服务器响应中获取所有 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842057/