我有一段简单的代码连接到一个基本的 HTTP 服务器,它总是返回一个纯文本 JSON 字符串。在我升级到 gcc 4.8 以访问 c++11 功能之前,我使用了一直工作的 Poco::net 库。我尝试过使用各种服务器,但发生了相同的行为,所以这是客户端。
响应的状态为 200 OK,我什至检查了内容长度,这与服务器响应的内容完全匹配,因此有些响应消息是如何接收的,但它不可用。
URI m_uri("http://www.bbc.co.uk");
m_uri.setPort(80);
HTTPClientSession m_session(m_uri.getHost(),m_uri.getPort());
m_session.setKeepAlive(true);
// send request
HTTPRequest req(HTTPRequest::HTTP_GET, "/news/", HTTPMessage::HTTP_1_1);
m_session.sendRequest(req);
// get response
HTTPResponse res;
istream& is = m_session.receiveResponse(res);
cout << res.getStatus() << " " << res.getReason() << " ,length = " << res.getContentLength() << " , type = " <<res.getContentType() << ", keepalive = " << res.getKeepAlive() << endl; // return 200 OK, correct content length on my real server, etc.
cout << "good " << is.good() << endl; // istream is good, but gcount is 0
// Copy response
string results;
// StreamCopier::copyToString(is, results); // Fails with c++11
is >> results;
cout << results <<endl; // blank
if (results.empty())
cout << "Error" << endl; // yep, empty.
真的不知道该怎么办了。我尝试从源代码强制编译最新的 Poco 以使用 gcc 无济于事。花了几天试图弄清楚,但没有任何进展。我在 MacOSX Lion,gcc 4.8 Poco 4.3 和 4.6 测试