提升asio http客户端 - 不接收状态行,直接获取内容

时间:2013-11-14 18:25:33

标签: c++ http httpclient boost-asio

我使用此示例代码在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。

问题:为什么我在这里获取内容而不是响应行 - 示例代码有什么问题?

1 个答案:

答案 0 :(得分:0)

解决。我发现使用Wireshark的问题并注意到我的HTTP请求被破坏了。

问题是我在路径后发送了一个额外的\ n,因为我从默认参数中复制了它。