301 根据 GET 请求永久移动(某些站点)C++

301 Moved Permanently on GET request (some sites) C++

我只想使用 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);

机器人的令牌也显示在代码中,它只是一个临时机器人,所以请随意测试它,但更改聊天 ID 以查看结果。

如果遇到错误,请尝试这个:

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

这个returns一个有效的结果

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