c - 从 libevent 中的 HTTP 服务器响应中获取所有 HTTP header

标签 c http libevent

使用 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->keyheader->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/

相关文章:

java - 如何使用java.net.URLConnection触发和处理HTTP请求?

facebook - HTTPS 而非 HTTP 中的 CakePHP Facebook 插件错误

multithreading - libevent/epoll工作线程数?

c - libevent:从缓冲区读取所有字节

正确的 kill syscall linux 使用模式

c - 正确的方法是使用位域以二进制形式打印数字

android - 通过改造从服务器接收 PDF 响应

c - 如何忽略 C 中输入文件中不必要的注释行

c - 在 C 中是否可以一致地引用前向声明和非前向声明的结构?

c++ - 如何使用 Visual Studio 2008 构建 libevent 版本 2.0.10