【问题标题】:301 Moved Permanently on GET request (some sites) C++301 在 GET 请求上永久移动(某些站点) C++
【发布时间】:2021-09-19 20:12:48
【问题描述】:

我只想使用 C++ 代码向我的电报机器人发出 GET 请求,但它得到了 301 Moved Permanently(但如果我使用网络浏览器,它工作正常)。 对其他网站的请求工作正常,几乎没有错误(google.com、ip2c.org ...)。

下面我提供我正在使用的代码:

const std::string host = "api.telegram.org";
const std::string target = "/bot1781233486:AAENIwkZt0Lbv9zjks6l-4loBcWDzKyMhyU/sendMessage?chat_id=@ZiyodaEnglishPracticeTracker&text=Test+message+from+bot";

boost::asio::io_context ioc;

boost::asio::ip::tcp::resolver resolver(ioc);
boost::asio::ip::tcp::socket socket(ioc);
boost::asio::connect(socket, resolver.resolve(host, "80"));

http::request<http::string_body> req(http::verb::get, target, 11);

req.set(http::field::host, host);
req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);

http::write(socket, req);

{
    boost::beast::flat_buffer buffer;
    http::response<http::dynamic_body> res;
    http::read(socket, buffer, res);

    std::cout << res << std::endl;
}
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);

bot 的 token 也显示在代码中,它只是一个临时 bot,所以请随意测试,但更改聊天 id 以查看结果。

如果你遇到错误,试试这个:

const std::string host = "ip2c.org";
const std::string target = "/192.199.20.22";

这个返回一个有效的结果

【问题讨论】:

  • 问题是什么?
  • 301 Moved Permanently 是一个重定向。您必须提取 Location 标头并重做对该 URL 的请求。
  • 重定向可能是因为您正在尝试访问一个希望仅使用 HTTP 强制 HTTPS 的站点
  • @Jarod42 我的问题是:在我的情况下出现此错误的原因是什么?因为如果我在浏览器上使用这个链接,它可以正常工作,但我不能使用 c++ 代码来做到这一点
  • @rpress 能否请您提供有关如何操作的更详细信息?

标签: c++ sockets boost get http-status-code-301


【解决方案1】:

我不得不将它从 HTTP 重定向到 HTTPS,通过将端口从 80 更改为 443 解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2012-07-10
    • 1970-01-01
    • 2012-11-21
    • 2020-04-06
    • 2018-09-14
    相关资源
    最近更新 更多