2013-10-05 3 views
2

어떻게 든 디코딩되지 않는다 응답 그러나 didnt는 작동했다. 도와 줘서 고마워.마시고 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" 

그런 다음, 표준 : : IStream을 압축 형태로 마시고 :: 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; 
... 
+0

나는이 일을 끝났다. 그러나 해결책을 게시하는 것을 잊었습니다. :피 – Pete