首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QT4.7中发布JSON请求

在QT4.7中发布JSON请求
EN

Stack Overflow用户
提问于 2016-11-02 04:14:14
回答 1查看 4.5K关注 0票数 2

我正在进行一个项目,要求我将JSON请求发送到API服务器,然后从服务器接收数据。然而,我无法使它发挥作用。这是我的密码

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QUrl serviceUrl = QUrl("https://www.jusmine.jp/KA/KGBloginCheck");
    QNetworkRequest request(serviceUrl);
    QJsonObject json;
    json.insert("userid","xxxx");
    json.insert("userpass","xxxx");     
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
    request.setHeader(QNetworkRequest::ContentLengthHeader,QByteArray::number(json.size()));
    QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
    connect(networkManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(serviceRequestFinish(QNetworkReply*)));
    networkManager->post(request,QJsonDocument(json).toJson());
}
void MainWindow::serviceRequestFinish(QNetworkReply *rep)
{
    QString strReply = (QString)rep->readAll();
    qDebug()<<"Test: "<<strReply;
}

在运行程序之后,我从服务器上什么也得不到。(这段代码构建在QT4.7.0上,因此我必须使用库qjson4-master)。我不知道有没有人能帮我解决这个问题。

这是测试服务器API的结果:

EN

回答 1

Stack Overflow用户

发布于 2016-11-02 08:07:51

您正在错误地计算ContentLengthHeader

代码语言:javascript
复制
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(json.size()));

请注意,QJsonObject::size()返回存储在对象中的(键、值)对的数量(而不是其文本表示的长度)。显然,标题应该等于内容的长度,而不是它的(键、值)对的数量。

MainWindow构造函数中的代码应该如下所示:

代码语言:javascript
复制
QUrl serviceUrl = QUrl("https://www.jusmine.jp/KA/KGBloginCheck");
QNetworkRequest request(serviceUrl);
QJsonObject json;
json.insert("userid","xxxx");
json.insert("userpass","xxxx");     
QJsonDocument jsonDoc(json);
QByteArray jsonData= jsonDoc.toJson();
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
request.setHeader(QNetworkRequest::ContentLengthHeader,QByteArray::number(jsonData.size()));
QNetworkAccessManager networkManager;
connect(networkManager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(serviceRequestFinish(QNetworkReply*)));
networkManager.post(request, jsonData);

侧注:不需要自己计算内容长度标头,当您不指定时,Qt会为您添加这个标题,请参见实现这里。因此,您可以省略添加此标头的行。

我想从服务器获得状态"200“。我怎么知道那个号码?

在您的serviceRequestFinish槽中,使用QNetworkReply::attribute()

代码语言:javascript
复制
qDebug() << rep->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

如果您的请求没有问题,应该打印200

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40372376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档