[cpp-netlib]自行处理chunked编码的回包

来源:互联网 发布:手机淘宝触屏版登陆 编辑:程序博客网 时间:2024/05/22 08:24

使用下面这个函数代替原body函数。

std::string chunked_body(boost::network::http::client::response& response){    std::string body;    std::string partial_parsed = boost::network::http::body(response);    auto transfer_encoding_range = boost::network::http::headers(response)["Transfer-Encoding"];    if (!empty(transfer_encoding_range) && boost::iequals(boost::begin(transfer_encoding_range)->second, "chunked"))     {        auto begin = partial_parsed.begin();        std::string crlf = "\r\n";        for(auto iter = std::search(begin,partial_parsed.end(),crlf.begin(),crlf.end());iter != partial_parsed.end();iter = std::search(begin,partial_parsed.end(),crlf.begin(),crlf.end()))        {            std::string line(begin,iter);            if(line.empty()) break;            std::stringstream stream(line);            int len;            stream >> std::hex >> len;            iter += 2;            if(!len) break;            if(len <= partial_parsed.end() - iter)            {                body.insert(body.end(),iter,iter + len);                iter += len;            }            iter += 2;            begin = iter;        }    }    else    {        std::swap(body,partial_parsed);    }    return body;}


原创粉丝点击