常にプレーンテキストの JSON 文字列を返す基本的な HTTP サーバーに接続する単純なコードがあります。c++ 11機能にアクセスするためにgcc 4.8にアップグレードするまで、findで機能する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をテストしています