Можно ли как то скачать URL сайта сразу в переменную?

Да, в языке программирования C++ существуют различные способы загрузки содержимого URL-адресов в переменные. Один из наиболее популярных способов - это использование сторонних библиотек, таких как libcurl или Boost.Beast.

Библиотека libcurl - это библиотека для передачи данных по различным протоколам, включая HTTP. Она предоставляет простой и удобный API для выполнения HTTP-запросов и получения ответа. Для использования libcurl вам необходимо включить заголовочные файлы <curl/curl.h> и подключить соответствующую библиотеку при компиляции. Пример кода, демонстрирующего загрузку URL-адреса с помощью libcurl:

#include <curl/curl.h>
#include <string>

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* buffer) {
    size_t total_size = size * nmemb;
    buffer->append((char*)contents, total_size);
    return total_size;
}

std::string DownloadUrl(const std::string& url) {
    CURL* curl = curl_easy_init();
    std::string downloaded_data;

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &downloaded_data);

        CURLcode result = curl_easy_perform(curl);

        if (result != CURLE_OK) {
            // Обработка ошибок
        }

        curl_easy_cleanup(curl);
    }

    return downloaded_data;
}

int main() {
    std::string url = "http://example.com";
    std::string data = DownloadUrl(url);

    // Дальнейшая обработка данных...
    return 0;
}

Здесь функция DownloadUrl получает URL-адрес в качестве входного параметра и использует libcurl для загрузки содержимого этого URL-адреса. Загруженные данные сохраняются в строку downloaded_data и возвращаются из функции.

Если вы используете Boost C++ библиотеку, то ее компонент Boost.Beast также предоставляет возможность загрузки содержимого URL-адресов. Для работы с Boost.Beast требуется подключить заголовочный файл <boost/beast.hpp> и корректно настроить среду разработки для использования Boost. Пример кода, использующего Boost.Beast для загрузки URL-адреса в переменную:

#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
#include <boost/beast/version.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <iostream>
#include <string>

namespace beast = boost::beast; 
namespace http = beast::http;   
namespace net = boost::asio;    
using tcp = net::ip::tcp;        

std::string DownloadUrl(const std::string& url) {
    std::string result;

    try {
        net::io_context ioc;
        tcp::resolver resolver(ioc);
        beast::tcp_stream stream(ioc);

        auto const results = resolver.resolve(url, "http");

        stream.connect(results);

        http::request<http::string_body> req{http::verb::get, "/", 11};
        req.set(http::field::host, results);

        http::write(stream, req);

        beast::flat_buffer buffer;
        http::response<http::dynamic_body> res;

        http::read(stream, buffer, res);

        result = beast::buffers_to_string(res.body().data());
    } catch(const std::exception& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return result;
}

int main() {
    std::string url = "http://example.com";
    std::string data = DownloadUrl(url);

    // Дальнейшая обработка данных...
    return 0;
}

Здесь функция DownloadUrl использует Boost.Beast для отправки HTTP-запроса GET на указанный URL-адрес и получения ответа. Полученное содержимое сохраняется в переменную result и возвращается из функции.

Оба приведенных выше примера позволяют загружать URL-адреса и сохранять результат в переменную. Вы можете выбрать тот, который лучше подходит вашим требованиям и использовать его в своих проектах на языке программирования C++.