Qt-ohjelmointi
Http POST

Tässä harjoituksessa tutkitaan kuinka Qt-sovelluksella luodaan uusi rivi book-tauluun.

  1. Lisää mainwindow.h tiedostoon private slots osioon:
    void onAddBookClicked();
    
  2. Lisää sovellukseen Push Button ja kytke sen clicked signaali slottiin onAddBookClicked (joko UI-editorissa tai koodissa).
  3. Kirjoita mainwindow.cpp tiedostoon slot-funktio:
    void MainWindow::onAddBookClicked()
    {
        QJsonObject jsonObj;
        jsonObj.insert("name","Uusi kirja");
        jsonObj.insert("author","Matti Mainio");
        jsonObj.insert("isbn","123-456-789");
    
        QString site_url="http://localhost:3000/book";
        QNetworkRequest request(site_url);
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    
        //WEBTOKEN ALKU
            QByteArray myToken="Bearer "+webToken;
            request.setRawHeader(QByteArray("Authorization"),(myToken));
        //WEBTOKEN LOPPU
    
        //luo manager konstruktorissa, jos tarvitset sitä muissa funktioissa
        manager = new QNetworkAccessManager(this);
    
        QJsonDocument jsonDoc(jsonObj);
        QNetworkReply *reply = manager->post(request, jsonDoc.toJson());
        connect(reply, &QNetworkReply::finished, this, [reply, this]() {
            // Tarkistetaan verkkovirheet
            if (reply->error() != QNetworkReply::NoError) {
                qWarning() << "Network error:" << reply->errorString();
                reply->deleteLater();
                return;
            }
    
            QByteArray response_data = reply->readAll();
            qDebug() << response_data;
    
            reply->deleteLater();
        });
    }
    

    Huomaa rakenne: Button-slotti (onAddBookClicked) on erillinen metodi, mutta HTTP-vastauksen käsittely tehdään lambda-funktiolla.

    HTTP POST Request -rakenne (webtoken-autentikoinnilla)

    HTTP Request Line: POST http://localhost:3000/book HTTP/1.1 Headers: Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6... ← webToken Body (JSON): { "name": "Uusi kirja" , "author": "Matti Mainio" , "isbn": "123-456-789" } 💡 POST-pyynnössä data lähetetään request bodyssä JSON-muodossa



Toggle Menu