Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99

Скачать xml файл с веб сайта

21.07.2025, 15:22. Показов 4546. Ответов 29

Студворк — интернет-сервис помощи студентам
начал набивать в проекте и выпало вот такое словечко:XMLHTTPRequest, если так можно это назвать. потом нашел сайт:https://github.com/Humminghead/xmlhttprequest. но дальше первой строчки дело не продвинулось.
не понимаю, помогите:XMLHTTPRequest request("GET", url, false);
ошибка:"request" использует не имеющую определения структуру class "XMLHTTPRequest"
инициализация: невозможно преобразовать "initializer list" в "int"
обе ошибки к одной строчке.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.07.2025, 15:22
Ответы с готовыми решениями:

Веб-браузер, парсинг в общем работа с веб-страничками!
Здраствуйте! Вот тут решил попрактиковаться в работе с WebBrowser.. Постановка задачи: Открыл я...

Отображение веб-станицы в оконном приложении (не веб) , созданном в qt creator
Всем привет, мучает такой вопрос. Необходимо в обычном приложении отобразить веб-страницу. Вроде...

Скачать веб-страницу
Всем привет! Подскажите пожалуйста, как можно скачать в string веб-страницу?

29
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
12.08.2025, 08:48
что вы сделать то хоть хотите ?
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
13.08.2025, 08:06  [ТС]
хочу использовать этот самый XMLRequest чтобы создать http запрос
0
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
13.08.2025, 10:33
XMLHTTPRequest — это API браузеров, не предназначенное для C++.
Ошибки, которые вы получаете, связаны с тем, что вы пытаетесь использовать JavaScript API в C++.
В C++ для HTTP-запросов лучше использовать cURL.
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
24.08.2025, 20:48  [ТС]
по ссылке переходили? там написано что для с++
0
Заблокирован
24.08.2025, 21:02
Цитата Сообщение от MVDmitrii Посмотреть сообщение
ошибка:"request" использует не имеющую определения структуру class "XMLHTTPRequest"
инициализация: невозможно преобразовать "initializer list" в "int"
1. Проверьте поддерживает ли используемый компилятор стандарт C++17 или выше.
2. Вы скомпилировали приведенную библиотеку и подключили её к вашему проекту/(указали необходимые опции линкера)?
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
25.08.2025, 13:16  [ТС]
1, да поддерживает
2,"начал набивать в проекте и выпало вот такое словечко:XMLHTTPRequest," я полагаю что уже установлена, по умолчанию
0
Заблокирован
25.08.2025, 13:44
Цитата Сообщение от MVDmitrii Посмотреть сообщение
XMLHTTPRequest," я полагаю что уже установлена, по умолчанию
Что значит выбило? Какая то подсказка?
Не знаю что там установленно.
Но та библиотека что вы привели по ссылке нуждается в компиляции и подключении.

Добавлено через 2 минуты
Вам лучше описать задачу и среду/фреймвор (если есть) с помощью которого пытаетесь решить.
XML точно такой же файл как и все остальные и точно так же скачивается "с веб сайта".
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
27.08.2025, 17:19  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
extern QString PREVPRICE;//глобальнаая для хранения результат вырваного из xml
extern QNetworkReply* reply;//глобальная для хранения результата ответа, файл xml
void HttpFetcher::setURL(const QUrl &url)
{
    reply = manager->get(QNetworkRequest(QUrl(url)));//перезаписываем результат ответа
}
 
void HttpFetcher::onFinished(QNetworkReply* reply)    //создаем указатель на объект ответа
{
    if(reply->error() == QNetworkReply::NoError)
    {
        QByteArray content = reply->readAll();   // Читаем содержимое ответа
        PREVPRICE = xmlParser(content);          // Выделяем число
        QString rew = QString::fromUtf8(content.constData());
        int statuscode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
        qDebug()<<QVariant(statuscode).toString();//"0"
        qDebug()<<rew;//""
    }
    else
    {
        qWarning() << "Ошибка HTTP:" << reply->errorString();
        qDebug()<< reply->errorString();
    }
    reply->deleteLater();
}
использую Qt creator
вот такой xml файл открывается через браузер :
XML
1
2
3
4
5
6
7
/*<document>
<data id="marketdata">
<rows>
<row PREVPRICE="78.52"/>
</rows>
</data>
</document>*/
помогите найти ошибку

Добавлено через 2 минуты
C++ (Qt)
1
2
qDebug()<<QVariant(statuscode).toString( );//"0"
qDebug()<<rew;//""
эти строки дают результат в комментариях
0
Заблокирован
27.08.2025, 19:23
Цитата Сообщение от MVDmitrii Посмотреть сообщение
C++
1
extern QNetworkReply* reply;//глобальная для хранения результата ответа, файл xml
Зачем это?

Цитата Сообщение от MVDmitrii Посмотреть сообщение
помогите найти ошибку
Где и как именно проявляется ошибка?
Цитата Сообщение от MVDmitrii Посмотреть сообщение
qDebug()<<rew;//""
Здесь пустая строка?
А ваш xmlParser не может данные(content) очистить?
Проверьте до и после.
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
28.08.2025, 08:50  [ТС]
Зачем это?
чтобы потом передавать в :void HttpFetcher::onFinished(QNetworkReply* reply)
А ваш xmlParser не может данные(content) очистить?
закомментировал эту строку и все заработало, спасибо за наводку, буду разбираться
0
Заблокирован
28.08.2025, 10:36
Цитата Сообщение от MVDmitrii Посмотреть сообщение
Зачем это?
чтобы потом передавать в :void HttpFetcher::onFinished(QNetworkReply* reply)
Этот слот вызывается через коннект к AccessManager.
QNetworkReply* reply - локальная для функции и передается через сигнал.
Вы нигде её больше не используете, плюс явно удаляете в конце функции, что правильно, раз дальше нигде не используете.
Просто лишняя переменная.
Это не страшно.

Добавлено через 2 минуты
Цитата Сообщение от MVDmitrii Посмотреть сообщение
закомментировал эту строку и все заработало, спасибо за наводку, буду разбираться
Выход может быть довольно банальным.
Просто передавать копию данных в xmlParser, если нужно их же использовать позже.
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
28.08.2025, 11:18  [ТС]
QNetworkReply* reply;//глобальная для хранения результата ответа, файл xml
без этого пишет :Использование незаявленного идентификатора "reply"

в общем ответ приходит с второго захода, видимо порядок создания запроса неправильный. но где не понял пока. вроде все логично написал но...
0
Заблокирован
28.08.2025, 12:04
Цитата Сообщение от MVDmitrii Посмотреть сообщение
без этого пишет :Использование незаявленного идентификатора "reply"
В данном случае достаточно
C++ (Qt)
1
manager->get(QNetworkRequest(QUrl(url)));
Цитата Сообщение от MVDmitrii Посмотреть сообщение
ответ приходит с второго захода
Пока не вижу причин для этого.

Добавлено через 1 минуту
И вы же создали коннект сигнала типа такого?
C++ (Qt)
1
2
    connect(&manager, &QNetworkAccessManager::finished,
        this, &HttpFetcher::onFinished);
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
28.08.2025, 12:28  [ТС]
не получается цитировать, выделяю - нажимаю "цитировать" и ничего не происходит.

"В данном случае достаточно"

ок, тогда что принимать будет : onFinished?

C++
1
2
3
HttpFetcher *fetcher = new HttpFetcher;//Создаем новый запрос
fetcher->setURL(url);//Принимаем новый адрес
fetcher->onFinished(reply);//эта функция перезапишет PREVPRICE
"И вы же создали коннект сигнала типа такого?"

да конечно именно так!
0
Заблокирован
28.08.2025, 15:17
Лучший ответ Сообщение было отмечено MVDmitrii как решение

Решение

Цитата Сообщение от MVDmitrii Посмотреть сообщение
ок, тогда что принимать будет : onFinished?
onFinished будет принимать то что и принимает.
onFinished - это слот вашего класса.
QNetworkAccessManager после привязки сигнала и слота.
При выполнении запроса get, начнет производить этот самый запрос, после получение данных, он спровоцирует сигнал QNetworkAccessManager::finished, что повлечет вызов и выполнения слота HttpFetcher::onFinished.
Его не нужно вызывать явно.
Как у вас:
Цитата Сообщение от MVDmitrii Посмотреть сообщение
C++
1
2
fetcher->setURL(url);//Принимаем новый адрес
fetcher->onFinished(reply);//эта функция перезапишет PREVPRICE
Вторая строчка не нужна.
Поэтому у вас и два вызова.
Первый, когда ещё ответ не получен, так как выполнения программы быстрее действий по сети.
Второй, как я описал выше, вызвал QNetworkAccessManager когда ответ был получен.

Не по теме:

Есть два способа цитировать:
1. Выделить часть сообщения и нажать на всплывающий Хинт "цитировать".
2. Процитировать всё сообщение: Нажать на "быстрый ответ" -> поставить галочку под полем ответа "Вставить цитату в ответ?" -> можно писать и отсылать, можно выбрать "расширенный режим".

Плюс листингы программ и их частей, нужно брать в теги кода: С++ и так далее.

0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
28.08.2025, 16:39  [ТС]
ураа заработало!!!!!!!!!
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
26.09.2025, 13:42  [ТС]
выполняется код, доходит до строчки 80 перепрыгивает на 15 выполняется все внутри: void HttpFetcher::setURL(const QUrl &url).
затем перепрыгивает на строку 82 и создает лэйбл с пустым значением , а потом переходит к строке 21: void HttpFetcher::onFinished() и получает значение.
Миниатюры
Скачать xml файл с веб сайта   Скачать xml файл с веб сайта  
0
Покинул чат.
1132 / 727 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
26.09.2025, 15:37
MVDmitrii, по этим обрывкам (на скринах ) сложно понять, но рискну предположить, что на 2м скрине конструктор окна, и результат запроса просто не успевает прийти перед тем, как создается лейбл (PREVPRICE соответственно неуспевает меняться тоже). Тут либо лейбл с задержкой создавать через QTimer::singleShot, что конечно же бред, - либо испускать сигнал из слота onFinish() класса HttpFether, связывать этот сигнал со слотом окна, в котором находится лейбл, и уже в этом слоте устанавливать текст для лейбла.

На листинг без форматирования, за скрины
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
class HttpFether
{
...
signal:
void sig(QString);
}
...
void HttpFether::onFinished()
{
...
emit sig(xmlParser(content));
}
Где то в классе окна
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyWindow
{
MyWindow(){
connect(fether, &HttpFether::sig, this, &MyWindow::slt);
}
...
public slots:
void slt(QString);
}:
void MyWindow::slt(QString txt)
{
layout->addWidget(new QLabel(txt));
}
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 99
26.09.2025, 16:06  [ТС]
появилась идея сделать через progressBar и uploadProgress :connect(reply,&QNetworkReply::uploadPro gress,this
и где то дальше : если прогресс 100%.

Добавлено через 4 минуты
C++ (Qt)
1
void QNetworkReply::uploadProgress(qint64 bytesSent, qint64 bytesTotal)
Загрузка будет завершена, когдаbytesSentравноbytesTotal. В это время,bytesTotalне будет -1
if (bytesSent==bytesTotal)....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2025, 16:06
Помогаю со студенческими работами здесь

Как скачать веб-страницу?
Вопрос такой же как и в заголовке. Как можно скачать веб страницу, так же как и в браузере?

Как скачать файл из Интернета с конкретного сайта
Как скачать файл из Интернета с конкретного сайта ?? листинг пожалуйста

Скачать файл с сайта
Знаю, тема наезженная, но никак не выходит реализовать. Задача очень простая - написать программу...

Как скачать файл из Интернета с конкретного сайта
Как скачать файл из Интернета с конкретного сайта!!!!

Скачать zip файл с сайта
почему то обозначает URL как незедекларированую, но она описана как - const char* URL взято из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru