【问题标题】:Qt Post request executing but failingQt Post 请求执行但失败
【发布时间】:2019-03-26 15:40:59
【问题描述】:

不知何故我在使用 Qt 时遇到了麻烦。 我正在尝试向服务器发送 POST 请求。

在我制作了一个带有 windows 标头的 c++ 程序来执行 POST 请求之前,效果很好,但现在我想为该程序制作一个 GUI。

我 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

任何可以帮助我完成项目@工作的人。

【问题讨论】:

  • 问题出在哪里?你说它“失败”,但这不是很清楚。 onFinish 会被调用吗?服务器没有收到任何传入请求吗?愚蠢的问题,但是网址正确吗?
  • @mrg95 on Finish 永远不会被调用。请求的数据格式为:param1=value1&amp;param2=value2&amp;param3=value3,url正确。服务器没有收到任何请求,它在我的程序中的某个地方失败了。
  • @mgr95 给你一个我如何使用我的班级的例子:c++ HttpPOST database("localhost/mw2018/Database/POST.php"); QList&lt;QString&gt; parameter; QList&lt;QString&gt; value; parameter.append("table"); parameter.append("Value"); value.append("TEST"); value.append("testvalue"); database.postData(parameter, value);

标签: c++ qt post network-programming qt5


【解决方案1】:

如果您刚刚从 Windows C++ 转到 Qt C++。你有一个 QApplication,你在 main 函数中调用了 exec() 吗?

没有事件循环,Qt IO 类将无法工作。听起来您要么没有主事件循环,要么在没有主事件循环的线程中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-28
    • 2018-04-22
    • 2011-09-07
    • 2013-02-08
    • 2013-03-21
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多