Russian Qt Forum
Ноябрь 22, 2024, 04:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkRequest vs AJAX возможно ли такое вообще? (РЕШЕНО)  (Прочитано 7374 раз)
Игорь
Гость
« : Ноябрь 22, 2017, 12:20 »

Добрый день. Стоит задача: передавать параметры и получить данные со стороннего сервиса (который никакого API не предоставляет). Чтоб далеко не ходить, вот конкретный пример https://egisz.medkirov.ru/e-reg2.nsf/searchByStreet.xsp, на страничке https://egisz.medkirov.ru/e-reg2.nsf/functions.js есть функция searchDistrict() в теле которой идет AJAX вызов
Код:
	$.ajax({ 
     url: "getRegion.xsp",
     type: "POST",
     data: ({ city:$('#city').val(), q: $('#street').val(), f: "getStreet", village: $('#village').val(), dom: $('#dom').val(), medgroup:$("#medgroup").val()}),
     dataType: "html",
     success: function(response){
  var items = response.split("\n");
Дак вот собственно вопрос: можно ли с помощью какого-то Qt-класса (например QNetworkRequest) сделать вызов getRegion.xsp с параметрами, и почитать результат?  
Спасибо.
« Последнее редактирование: Ноябрь 28, 2017, 09:21 от Игорь » Записан
Игорь
Гость
« Ответ #1 : Ноябрь 28, 2017, 08:40 »

Чувак,
1. ты сформулировал свой вопрос не верно. Тебе нужен просто вызов функции getRegion.xsp с параметрами;
2. если у тебя возникают проблемы, или что-то не работает, и ты не знаешь что, запоминай следующую универсальную инструкцию:
 - Прежде всего нужна максимально полная отладочная информация, в твоем случае это https://www.telerik.com/fiddler , но я для тех же целей воспользовался
 https://www.wireshark.org/ и для отладки просто юзал похожий сайт без использования ssl
 - Дальше все просто, смотришь сетевые пакеты оригинальные (генерируемые вебмордой браузера), и свои. Находишь разницу, и сводишь их до тех пор, пока не
 получишь нужный тебе ответ, или не сведешь их 1 к 1.

« Последнее редактирование: Ноябрь 29, 2017, 15:47 от Игорь » Записан
Игорь
Гость
« Ответ #2 : Ноябрь 28, 2017, 09:00 »

- Прежде всего нужна максимально полная отладочная информация, в твоем случае это https://www.telerik.com/fiddler , но я для тех же целей воспользовался
 https://www.wireshark.org/ и для отладки просто юзал похожий сайт без использования ssl

Ухты, спасибо, дружище. Все сразу получилось, где ты раньше-то был. У меня оказывается проблема-то была в кодировке при передаче параметров, а я все на заголовки грешил...

Вот что у меня по итогу получилось:
Код:
	const static QUrl AddressServiceUrl = QString("https://egisz.medkirov.ru/e-reg2.nsf/getRegion.xsp"); 
.........
.........
networkManager = new QNetworkAccessManager(this);
networkManager->setProxy((!QNetworkProxyFactory::systemProxyForQuery().isEmpty()) ? QNetworkProxyFactory::systemProxyForQuery()[0] : QNetworkProxy());
QNetworkRequest requisitesServiceRequest(AddressServiceUrl);

QByteArray requisitesServiceRequestBody;
requisitesServiceRequestBody.append("city=");
requisitesServiceRequestBody.append(QUrl::toPercentEncoding("Киров"));
requisitesServiceRequestBody.append("&q=");
requisitesServiceRequestBody.append(QUrl::toPercentEncoding("Грибоедова"));
requisitesServiceRequestBody.append("&f=getStreet&village=&dom=37&medgroup=");
requisitesServiceRequestBody.append(QUrl::toPercentEncoding("Терапия"));

QNetworkReply *requisitesServiceReply = networkManager->post(requisitesServiceRequest, requisitesServiceRequestBody);
connect(requisitesServiceReply, &QNetworkReply::finished, [=]() {
if ((requisitesServiceReply->error() == QNetworkReply::NoError)) {
QString requisitesServiceReplyBody = QString::fromUtf8(requisitesServiceReply->readAll());
QUrl qur = requisitesServiceReply->url();
QList<QByteArray> head = requisitesServiceReply->rawHeaderList();
QList<QNetworkReply::RawHeaderPair> headd = requisitesServiceReply->rawHeaderPairs();


}
});
« Последнее редактирование: Ноябрь 28, 2017, 11:05 от Игорь » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Ноябрь 30, 2017, 13:15 »

что тут за ад творится? Веселый
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Ноябрь 30, 2017, 13:51 »

что тут за ад творится? Веселый
чтобы разобраться с этим, нужно съездить в Киров на Грибоедова 37 и пройти некую терапию. ыыы Веселый
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Ноябрь 30, 2017, 13:56 »

хех
Записан
Игорь
Гость
« Ответ #6 : Декабрь 08, 2017, 15:56 »

Ага, ага, пришли постебаться, нет чтоб чайнику помочь.
Заводы стоят, одни гитаристы стеберы в стране.
Записан
titan83
Гость
« Ответ #7 : Декабрь 08, 2017, 20:52 »

что тут за ад творится? Веселый
похоже на безжалостную российскую автоматизацию.
Записан
titan83
Гость
« Ответ #8 : Декабрь 08, 2017, 20:52 »

А по теме: автор, так у тебя все получилось? или нет? непонятно.
Записан
Игорь
Гость
« Ответ #9 : Декабрь 11, 2017, 07:36 »

А по теме: автор, так у тебя все получилось? или нет? непонятно.
да, все получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 22.