【问题标题】:Reading from a file online c++从文件在线读取 C++
【发布时间】:2018-02-07 16:05:40
【问题描述】:

我正在使用此代码:

#include <iostream>
#include <string>
#include <boost/asio.hpp>
int main()
{
    boost::asio::ip::tcp::iostream s("www.a.com", "http");
    if(!s)
        std::cout << "Could not connect to www.a.com\n";
    s  << "GET /b.txt HTTP/1.0\r\n"
       << "Host: www.a.com\r\n"
       << "Accept: */*\r\n"
       << "Connection: close\r\n\r\n" ;
    for(std::string line; getline(s, line); )
         std::cout << line << '\n';
}

当然,我使用正确的网站而不是“a.com” 但我总是收到“无法连接到 www.a.com” 知道为什么吗?

【问题讨论】:

  • s.error().message() 说什么?
  • 无法连接到 www.a.com HTTP/1.1 400 错误请求日期:2018 年 2 月 7 日星期三 16:15:35 GMT 服务器:Apache 接受范围:字节变化:接受编码,用户代理连接:关闭内容类型:text/html
  • 如果使用有效地址会怎样?
  • 请发布您尝试连接的网址。

标签: c++ boost-asio


【解决方案1】:

您必须正确格式化您的请求。对于谷歌:

int main()
{
    boost::asio::ip::tcp::iostream s("www.google.com", "http");
    if(!s)
        std::cout << "Could not connect to www.a.com\n";
    s  << "GET / HTTP/1.0\r\n"
        << "Host: www.google.com\r\n"
        << "User-Agent: Boost\r\n"
        << "Accept: */*\r\n"
        << "Connection: close\r\n\r\n" ;
    for(std::string line; getline(s, line); )
        std::cout << line << '\n';
}

注意,GET 后面没有冒号。 / 是几乎任何网站的根路径。你也设置了Host: 吗?

上面的代码让我从 google 获得了 200 OK。

【讨论】:

  • “在我的机器上工作”通常不是最好的答案.. 而且,似乎 OP 卡在第一个 if (!s) - 他没有得到 s &lt;&lt;.. 代码。
  • 嗨,@Default,在他的评论中他说他收到了:400 Bad Request
  • 好的@Default,如果是他的消息,我很困惑,会删除我的答案。他应该显示他尝试连接的 url。
  • 我同意你的看法。出于这个原因,我投票结束了这个问题。信息太少,无法做出正确回应。 (在我看来,他没有使用任何括号的事实似乎代码也可能不完整。)保留或删除您的答案取决于您。我只是注意到它在你的机器上工作的事实可能对 OP 没有帮助。
  • 出于安全原因,我无法发布网址,因为该网站仍在建设中,无论如何感谢@lakeweb 现在提供的答案。抱歉,我无法接受,因为我是社区的新手,而且我没有足够的声望点。
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 2013-06-09
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-11-19
  • 2014-04-02
相关资源
最近更新 更多