我使用此示例代码在Mac OSX 10.8上使用boost 1.52进行HTTP客户端http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp03/http/client/sync_client.cpp - 使用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之前,streambuffer包含以下文本:
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization ...
如您所见,此时的streambuf包含要通过HTTP下载的CONTENT,而不是客户端所期望的HTTP状态行。当服务器在传输整个文件后关闭连接时,读取终止于EOF。
问题:为什么我在这里获取内容而不是响应行 - 示例代码有什么问题?
答案 0 :(得分:0)
解决。我发现使用Wireshark的问题并注意到我的HTTP请求被破坏了。
问题是我在路径后发送了一个额外的\ n,因为我从默认参数中复制了它。