【发布时间】: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&param2=value2&param3=value3,url正确。服务器没有收到任何请求,它在我的程序中的某个地方失败了。 -
@mgr95 给你一个我如何使用我的班级的例子:
c++ HttpPOST database("localhost/mw2018/Database/POST.php"); QList<QString> parameter; QList<QString> value; parameter.append("table"); parameter.append("Value"); value.append("TEST"); value.append("testvalue"); database.postData(parameter, value);
标签: c++ qt post network-programming qt5