Запрос Qt Post выполняется, но не выполнен - PullRequest
0 голосов
/ 26 марта 2019

Почему-то у меня проблемы с Qt. Я пытаюсь отправить POST-запрос на сервер.

До того, как я создал программу на С ++ с заголовками Windows для выполнения запроса POST, который работал нормально, но теперь я хочу создать графический интерфейс для программы.

Я на 100% уверен, что код php на стороне сервера в порядке, и я следовал примерам Qt и Stackoverflow, но я не получаю никаких данных в моей базе данных с помощью Qt.

Вот код POST:

HttpPOST.h

#ifndef HTTPPOST_H
#define HTTPPOST_H

#include <QObject>
#include <QtNetwork>
#include <QHttpMultiPart>

class HttpPOST : public QObject
{
Q_OBJECT
public:
    HttpPOST(QString url);
    void postData(QList<QString> parameter, QList<QString> value);
    const QString EQUALS = "=";
    const QString AND = "&";
signals:

public slots:
    void onFinish(QNetworkReply *reply);
private:
    QNetworkAccessManager * manager;
    QUrl url;
    QByteArray data;
};

#endif // HTTPPOST_H

HttpPOST.cpp

#include "httppost.h"

HttpPOST::HttpPOST(QString url)
{
    this->url = QUrl(url);
}

void HttpPOST::postData(QList<QString> parameter, QList<QString> value)
{
    data.clear();
    for (int i=0; i<parameter.size(); i++) {
        data.append(parameter[i]);
        data.append(EQUALS);
        data.append(value[i]);
        if(i < parameter.size()-1){data.append(AND); }
    }
    manager = new QNetworkAccessManager(this);
    connect(manager,
            SIGNAL(finished(QNetworkReply*)),
            this,
            SLOT(onFinish(QNetworkReply*)));
    connect(manager,
            SIGNAL(finished(QNetworkReply*)),
            manager,
            SLOT(deleteLater()));
    QHttpMultiPart *http = new QHttpMultiPart(QHttpMultiPart::FormDataType, this);

    QHttpPart receiptPart;
    receiptPart.setHeader(QNetworkRequest::ContentDispositionHeader, 
                          QVariant("form-data; name=\"data\""));
    receiptPart.setBody(data);

    http->append(receiptPart);

    manager->post(QNetworkRequest(url), http);
}

void HttpPOST::onFinish(QNetworkReply *reply)
{
    qDebug("POST request finished!");
    qDebug(reply->readAll());
}

В настоящее время я не знаю, что я делаю неправильно. : C <-Очень грустно! </p>

Любой, кто может помочь мне в проекте @ work.

1 Ответ

0 голосов
/ 24 апреля 2019

Если вы только что перешли с Windows C ++ на Qt C ++.У вас есть QApplication, и вы вызывали exec () в основной функции?

Классы Qt IO не будут работать без EventLop.Похоже, что у вас либо нет основного цикла событий, либо вы находитесь в другом потоке без него.

...