Commit e99effc1 by xiongziliang

修复content-length为0时不触发onResponseCompleted的bug

parent 61fbb635
...@@ -139,15 +139,28 @@ int64_t HttpClient::onRecvHeader(const char *data, uint64_t len) { ...@@ -139,15 +139,28 @@ int64_t HttpClient::onRecvHeader(const char *data, uint64_t len) {
_parser.Parse(data); _parser.Parse(data);
onResponseHeader(_parser.Url(), _parser.getValues()); onResponseHeader(_parser.Url(), _parser.getValues());
if (_parser["Content-Length"].empty() && !_parser.Content().empty()) { if(_parser["Content-Length"].empty()){
//如果http回复未声明Content-Length字段,但是却有content内容,那说明可能是个不限长度的content //没有Content-Length字段
_totalBodySize = INT64_MAX; if(!_parser.Content().empty()){
_recvedBodySize = 0; //如果http回复未声明Content-Length字段,但是却有content内容,那说明可能是个不限长度的content
//返回-1代表不限制content回复大小 _totalBodySize = INT64_MAX;
return -1; _recvedBodySize = 0;
//返回-1代表不限制content回复大小
return -1;
}
//content长度为0,本次http请求结束
onResponseCompleted_l();
return 0;
} }
_totalBodySize = atoll(_parser["Content-Length"].data());
_recvedBodySize = 0; _recvedBodySize = 0;
_totalBodySize = atoll(_parser["Content-Length"].data());
if(_totalBodySize == 0){
//content长度为0,本次http请求结束
onResponseCompleted_l();
return 0;
}
//虽然我们知道content的确切大小, //虽然我们知道content的确切大小,
//但是由于我们没必要等content接收完毕才回调onRecvContent(因为这样浪费内存并且要多次拷贝数据) //但是由于我们没必要等content接收完毕才回调onRecvContent(因为这样浪费内存并且要多次拷贝数据)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论