【发布时间】: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