2013-10-05 152 views
2

不知怎的,我发送了请求,但内容仍然看起来奇怪它似乎它不是解码,但响应包含以下内容: 内容编码:gzip波科HTTP响应不解码正确

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

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; 
} 

回答

7

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

在您的标题:

#include "Poco/InflatingStream.h" 

然后,构建波科:: InflatingInputStream用的std :: istream和压缩类型:

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; 
... 
+0

我终于实现了这一点。但忘了发布解决方案。 :P – Pete