Witaj szanowny Gościu na forum Odjechani,com.pl. Serdecznie zachęcamy do rejestracji. Tylko u nas tak przyjazna atmosfera.

Strona Odjechani.com.pl wykorzystuje pliki cookies, pozostając na stronie wyrażasz zgodę na ich zapis lub wykorzystanie. Więcej informacji w naszej polityce prywatności.

[Poradnik] Komunikacja aplikacji w C++ a serwerem w PHP.
#1
Witajcie, w tym poradniku pokażę bardzo prosty sposób na to, co zrobić, aby nasza aplikacja napisana w C++ mogła się komunikować z serwerem w PHP. Uznałem, że taki poradnik może być przydatny dla tych co piszą w C++ oraz zajmują się tworzeniem stron internetowych, w szczególności backendem, ponieważ C++ nie jest zbyt często używany do takich zastosowań. Do zrealizowania tego celu użyjemy biblioteki Qt. Komunikacja między programami będzie polegała na wysłaniu przez program w C++ żądania metodą GET lub POST oraz na odebraniu wyniku przez skrypt w PHP. Oto kod programu w C++ i skryptu w PHP:
Kod:
#include <QCoreApplication>
#include <QtNetwork>
#include <QDebug>
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   QNetworkAccessManager manager;
   QNetworkRequest request;
   request.setUrl(QUrl("http://localhost/x/x.php?zmienna=3"));
   request.setRawHeader(QByteArray("content-type"), QByteArray("application/x-www-form-urlencoded"));
   auto reply = manager.post(request, "zmienna=2");
   QObject::connect(reply, &QNetworkReply::finished, [&] {
       QByteArray result = reply->readAll();
       qDebug().noquote()<<result;
   });
   return a.exec();
}
Kod:
<?php
echo "Wynik POST: ".(2*$_POST["zmienna"])."\nWynik GET: ".(2*$_GET["zmienna"]);
?>
Zacznę od skryptu w PHP. Jego działanie polega na po prostu wyświetleniu wyniku mnożenia przez 2 zwartości nagłówków metod GET i POST o nazwie "zmienna". Kod w C++ jest nieco większy, ale też prosty. Należy też pamiętać o odpowiedniej zawartości pliku .pro dla projektu w Qt. Bez tego, ten projekt w Qt się nie skompiluje:

Cytat:
Kod:
QT += core
QT -= gui
QT += network

CONFIG += c++11

TARGET = konsola_qt
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
Działanie kodu w C++ jest następujące:

Tworzymy zmienne typu QNetworkAccessManager, która zawiera między innymi implementacje metod GET i POST oraz QNetworkRequest, która przechowuje adres URL naszego skryptu oraz ustawione nagłówki żądań. W tym przypadku tylko content-type. Po ustawieniu adresu URL i nagłówka, wykonujemy zapytanie i jego wynik tzn. zawartość strony zwróconą przez funkcję echo w skrypcie PHP zapisujemy do tablicy znaków typu QByteArray. Potem wyświetlamy tę tablicę w konsoli.
I to tyle. To był możliwie najprostszy przykład, aby tylko pokazać jak przeprowadzić taką komunikację.
  Odpowiedz


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  CloudFlare i przyspieszanie strony- poradnik Swordancer 11 3 598 05.06.2015, 21:36
Ostatni post: Swordancer
  Poradnik - Zmiana adresu MAC karty sieciowej np. od Wi-Fi dimix 2 1 645 26.10.2013, 19:54
Ostatni post: dimix
  [PORADNIK] Jak i skąd za darmo pobierać muzykę mp3 [HD] dimix 5 1 247 07.11.2012, 22:00
Ostatni post: Marszal
  [PORADNIK] Jak uruchomić dowolny program na kilka sposobów [HD] dimix 3 1 118 07.11.2012, 20:12
Ostatni post: Suicider
  Poradnik - jak wrzucić film na YouTube [HD] dimix 5 1 727 31.10.2012, 17:40
Ostatni post: dimix

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości