用libevent发出http请求

时间:2014-08-12 07:14:10

标签: c libevent

使用libevent发出http请求时,如何获取响应缓冲区中的内容长度?我知道evbuffer_remove()可以从缓冲区获取数据,但我想知道缓冲区的长度。

1 个答案:

答案 0 :(得分:1)

evbuffer_get_length()将告诉您缓冲区中有多少字节,evbuffer_remove()将返回从缓冲区复制的字节数。所以你可以这样做:

input = bufferevent_get_input(bev);

bytes_received = evbuffer_get_length(input);

/* Note calloc in case we copy less data than we have space allocated. */
data = calloc(bytes_received+1, sizeof(char));

bytes_copied = evbuffer_remove(input, data, bytes_received);

否则,如果你想知道完整的HTTP响应有多长,正如Joachim Pileborg所说,标题将告诉你内容有多长,尽管这可能并不总是可靠的。如果您不能依赖服务器始终提供准确的内容长度标头,您可能需要做的是逐个阅读,直到您找到HTTP响应的结束为此我强烈推荐此库:

https://github.com/joyent/http-parser

它非常容易地与Libevent集成。实际上,我使用这个库来解决确定HTTP响应结束的问题。