Mac OSX でブースト 1.52 を使用する HTTP クライアントhttp://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp03/http/client/sync_client.cppにこのサンプル コードを使用しています。 10.8 - clang でコンパイル (Apple clang 4.1)。
このサンプル プログラムを引数 sync_client www.boost.org /LICENSE_1_0.txt\n で実行すると、次の出力が得られます。
Exception: read_until: End of file
コードをデバッグしたところ、ここで例外がスローされていることがわかりました。
// Read the response status line. ...
boost::asio::read_until(socket, response, "\r\n");
read_until 関数をさらにデバッグすると、EOF に遭遇する前にストリームバッファに次のテキストが含まれていることが明らかになりました。
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization ...
ご覧のとおり、この時点の streambuf には、クライアントが予期していた HTTP ステータス行ではなく、HTTP 経由でダウンロードされる CONTENT が含まれていました。サーバーはファイル全体を送信した後に接続を閉じるため、当然、読み取りは EOF で終了します。
質問: ここに応答行ではなくコンテンツが表示されるのはなぜですか? サンプル コードの何が問題なのですか?