使用libevent发出http请求时,如何获取响应缓冲区中的内容长度?我知道evbuffer_remove()
可以从缓冲区获取数据,但我想知道缓冲区的长度。
答案 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响应结束的问题。