Создание простого WebService в С++/Qt (действующего как сервер), предоставляющего данные JSON
Мне нужно создать простой веб-сервис (являющийся "сервером" ). Целью является предоставление некоторых данных, которые я читаю в приложении Qt/С++, как JSON. В основном приложение JavaScript в браузере должно считывать свои данные из приложения Qt. Обычно это сценарий с одним пользователем, поэтому пользователь запускает приложение Google Maps в своем браузере, а дополнительные данные поступают из приложения Qt.
До сих пор я нашел эти библиотеки:
Проверка SO дает мне в основном ссылки на вышеуказанные библиотеки
Итак, в основном у меня есть следующие вопросы:
- Какую библиотеку вы бы использовали? Я хочу, чтобы он был максимально простым, а нужен пример.
- Есть ли другой (простой!) способ предоставить данные JSON на веб-странице JavaScript, кроме WebService?
- Изменить, примечания: ---
Необходимо, чтобы приложение было неотъемлемым. Веб-сервер не может быть установлен, дополнительное время работы не может быть использовано. Пользователь просто запускает приложение. Возможно, Qt WebKit может быть подход...
- Изменить 2 -
В настоящее время проверка крошечных веб-серверов с SO "Qt HTTP Server?"
Ответы
Ответ 1
Как и в моих тестах, в настоящее время я использую QtWebApp: http://stefanfrings.de/qtwebapp/index-en.html Это один из ответов Edit 2 (Qt HTTP Server?)
У небольшого WebServer Stefan есть хорошо документированный код, написанный в "Qt С++" и прост в использовании, особенно если вы уже работали с сервлетами. Поскольку он может быть легко интегрирован в мой проект Qt, у меня будет внутренний WebServer.
Некоторые демо-коды из моих тестов JSON, показывающие, что генерация содержимого JSON в основном создает QString
.
void WebServiceController::service(HttpRequest& request, HttpResponse& response) {
// set some headers
response.setHeader("Content-Type", "application/json; charset=ISO-8859-1");
response.setCookie(HttpCookie("wsTest","CreateDummyPerson",600));
QString dp = WebServiceController::getDummyPerson();
QByteArray ba = dp.toLocal8Bit();
const char *baChar = ba.data();
response.write(ba);
}
Если у кого-то есть простые примеры с другими libs, чтобы поделиться, пожалуйста, дайте мне знать.
Ответ 2
QByteArray ba = dp.toLocal8Bit();
const char *baChar = ba.data();
Вам не нужно преобразовывать массив QByteArray
в char. Response.write()
также можно вызвать с помощью QByteArray
.
Кстати: qPrintable(dp)
- это ярлык для преобразования из массива QString
в char.