0

我在 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 终止。

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

4

1 回答 1

0

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

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

于 2013-11-14T20:07:17.023 回答