我在 Mac OSX 上使用带有 boost 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 状态行。当服务器在传输整个文件后关闭连接时,读取自然会以 EOF 终止。
问题:为什么我在这里得到内容而不是响应行 - 示例代码有什么问题?