【问题标题】:Poco Http Response is not decoded properlyPoco Http 响应未正确解码
【发布时间】:2013-10-05 20:01:55
【问题描述】:

我以某种方式发送了请求,但内容看起来仍然很奇怪,因为它没有被解码,但响应包含以下内容: 内容编码:gzip

我尝试手动解码响应,但没有奏效。感谢您的帮助:)

void Client::load_login_page()
{
using namespace Poco;
using namespace Poco::Net;

URI uri(constants::url::main_url);
//HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPClientSession session("127.0.0.1", 8888);//Support Fiddler

std::string path(uri.getPathAndQuery());
if (path.empty()) 
    path = "/";

// send request
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
req.set("User-Agent",constants::url::user_agent);
req.add("Accept", "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/    x-xbitmap, */*;q=0.1");
req.add("Accept-Encoding","gzip,deflate");
req.setHost(uri.getHost(),uri.getPort());

session.sendRequest(req);

// get response
HTTPResponse res;
std::cout << res.getStatus() << " " << res.getReason() << std::endl;


std::cout << res.getContentType() << std::endl;
auto iter = res.begin();

while(iter != res.end())
{
    std::cout << iter->first << " : " << iter->second << std::endl;
    iter++;
}




std::istream &is = session.receiveResponse( res );
std::stringstream ss;
StreamCopier::copyStream( is, ss );

std::cout << ss.str() << std::endl;
}

【问题讨论】:

    标签: c++ poco-libraries


    【解决方案1】:

    要解压 gzip 编码的响应,可以使用 POCO 中提供的过滤流包装器。

    在您的标题中:

    #include "Poco/InflatingStream.h"
    

    然后,使用 std::istream 和压缩类型构造 Poco::InflatingInputStream:

    std::istream &is = session.receiveResponse( res );
    std::stringstream ss;
    Poco::InflatingInputStream inflater(is, Poco::InflatingStreamBuf::STREAM_GZIP);
    StreamCopier::copyStream( inflater, ss );
    
    std::cout << ss.str() << std::endl;
    ...
    

    【讨论】:

    • 我最终这样做了。但是忘记发布解决方案。 :P
    • 不要忘记以下标题:#include &lt;Poco/InflatingStream.h&gt; #include &lt;sstream&gt; #include &lt;Poco/StreamCopier.h&gt;
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多