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

This commit is contained in:
xiongziliang 2018-09-23 21:19:24 +08:00
parent 61fbb635c1
commit e99effc1d0

View File

@ -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(因为这样浪费内存并且要多次拷贝数据)