Парсер (скрапер) сайта

Пишу парсер на c++, который должен собирать расписание занятий. По туториалу на ютубе что-то более-менее рабочее написал, но автор видео использовал некое api (в моём коде это выглядело как std::string url = "ip-api.com", а также менялся параметр в req: req(http::verb::get, "/json/", 11)), и, насколько я понял, при подстановке туда адреса моего сайта, код должен был возвращать json для нужного мне адреса. В результате же я получаю ошибку 301 Moved permanently. Хотелось бы понять, как решить эту проблему и что вообще должно возвращаться в моём случае, желательно с доп. теорией для лучшего понимания. Использование библиотеки boost обязательно.

#include <iostream>
#include <string>
#include <boost/beast.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/connect.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>

namespace asio = boost::asio;
namespace beast = boost::beast;
namespace http = boost::beast::http;

class client{
public:
    std::string getResponse(std::string ip){
        std::string url = "lks.bmstu.ru";

        beast::error_code ec;
        asio::io_context io;

        asio::ip::tcp::resolver resolver(io);
        asio::ip::tcp::socket socket(io);
        asio::connect(socket, resolver.resolve(url, "80"));

        http::request<http::string_body> req(http::verb::get, "/schedule/83537f44-b8ff-11ed-a3ad-272ac9bbc1e7/", 11);

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

        http::write(socket, req, ec);

        std::string response;
        {
            beast::flat_buffer buffer;
            http::response<http::dynamic_body> res;
            http::read(socket, buffer, res);
            response = beast::buffers_to_string(res.body().data());
        }

        socket.shutdown(asio::ip::tcp::socket::shutdown_both, ec);
        
        return response;
    }
};

std::string getField(std::string json, std::string field){
    std::stringstream ss(json);
    boost::property_tree::ptree root;
    boost::property_tree::read_json(ss, root);

    if (root.empty()){
        return "Error";
    }
    return root.get<std::string>(field);
}

int main() {
    client client;

    std::string res = client.getResponse("lks.bmstu.ru");
    
    std::cout << res;
    return 0;
}

Ответы (0 шт):