Страница 1 из 1
вывод содержимого сайта в консоль
Добавлено: 03 июл 2024, 15:25
ya
Предварительно установить: libcurl4-openssl-dev
web-curl.0.0.1.cpp
Код: Выделить всё
#include <iostream>
#include <curl/curl.h>
size_t write_callback(void *ptr, size_t size, size_t nmemb, std::string* data)
{
data->append((char*)ptr, size * nmemb);
return size * nmemb;
}
int main()
{
CURL *curl;
CURLcode res;
std::string data;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://google.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
{
std::cerr << "Failed to get data from URL: " << curl_easy_strerror(res) << std::endl;
}
else
{
std::cout << data << std::endl;
}
curl_easy_cleanup(curl);
}
return 0;
}
Откомпилировать с параметром -lcurl
Код: Выделить всё
g++ -std=c++11 -o web-curl.0.0.1 web-curl.0.0.1.cpp -lcurl
Re: вывод содержимого сайта в консоль
Добавлено: 03 июл 2024, 17:50
ya
web-curl.0.0.3.cpp
Код: Выделить всё
#include <SFML/Graphics.hpp>
#include <curl/curl.h>
#include <iostream>
#include <string>
size_t writeFunction(void* ptr, size_t size, size_t nmemb, std::string* data) {
data->append((char*)ptr, size * nmemb);
return size * nmemb;
}
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Web Page Viewer");
std::string url = "https://google.com"; // URL веб-страницы
std::string content;
// Инициализация библиотеки libcurl
curl_global_init(CURL_GLOBAL_ALL);
CURL* curl = curl_easy_init();
// Установка URL для загрузки
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// Установка функции обратного вызова для записи данных в content
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunction);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
// Запуск загрузки
curl_easy_perform(curl);
// Завершение работы с libcurl
curl_easy_cleanup(curl);
curl_global_cleanup();
// Отображение содержимого веб-страницы в окне
sf::Font font;
font.loadFromFile("arial.ttf");
sf::Text text;
text.setFont(font);
text.setString(content);
text.setCharacterSize(12);
text.setPosition(10, 10);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear();
window.draw(text);
window.display();
}
return 0;
}
Установить библиотеку sfml
Компилировать с параметрами линковки:
Код: Выделить всё
g++ -std=c++11 -o web-curl.0.0.3 web-curl.0.0.3.cpp -lcurl -lsfml-graphics -lsfml-window -lsfml-system
Re: вывод содержимого сайта в консоль
Добавлено: 03 июл 2024, 17:53
ya
web-curl.0.0.4.cpp
Код: Выделить всё
#include <iostream>
#include <curl/curl.h>
#include <libxml/HTMLparser.h>
#include <SFML/Graphics.hpp>
// Функция для загрузки содержимого веб-страницы
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* data) {
data->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main() {
// Инициализация библиотеки curl
curl_global_init(CURL_GLOBAL_DEFAULT);
// Создание экземпляра curl
CURL* curl = curl_easy_init();
if (curl) {
std::string htmlContent;
// Устанавливаем URL страницы для загрузки
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
// Устанавливаем функцию обратного вызова для записи полученных данных
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlContent);
// Выполняем запрос
CURLcode res = curl_easy_perform(curl);
// Проверка на успешность запроса
if (res == CURLE_OK) {
// Распарсим загруженную HTML-страницу
htmlDocPtr doc = htmlReadMemory(htmlContent.c_str(), htmlContent.length(), "", NULL, HTML_PARSE_RECOVER);
if (doc) {
// Далее можно работать с содержимым страницы, например, отобразить его в окне SFML
// Создаем окно SFML
sf::RenderWindow window(sf::VideoMode(800, 600), "Web Content Display");
// Отображаем содержимое HTML-страницы на экране
// Здесь нужно написать код для рендеринга содержимого страницы в окне SFML
// Цикл обработки событий окна
while (window.isOpen()) {
// Обработка событий
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
// Отрисовка содержимого
window.clear();
// Здесь нужно написать код для отображения содержимого страницы
window.display();
}
// Освобождаем память после работы с содержимым страницы
xmlFreeDoc(doc);
}
} else {
std::cerr << "Error: " << curl_easy_strerror(res) << std::endl;
}
// Освобождаем ресурсы
curl_easy_cleanup(curl);
}
// Закрываем библиотеку curl
curl_global_cleanup();
return 0;
}
Перед компиляцией линковки установить библиотеку: libxml2 и создать символическую ссылку
Код: Выделить всё
sudo apt-get install libxml2-dev libxml2-doc
cd /usr/include
ln -s libxml2/libxml .
Компилировать с параметрами линковки:
Код: Выделить всё
g++ -std=c++11 -o web-curl.0.0.3 web-curl.0.0.3.cpp -lcurl -lsfml-graphics -lsfml-window -lsfml-system -lxml2