0

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 で終了します。

質問: ここに応答行ではなくコンテンツが表示されるのはなぜですか? サンプル コードの何が問題なのですか?

4

1 に答える 1

0

解決しました。Wireshark を使用して問題を発見し、HTTP 要求が壊れていることに気付きました。

問題は、デフォルトのパラメーターからコピーしたため、パスの後に余分な \n を送信したことです。

于 2013-11-14T20:07:17.023 に答える