如果HTTP响应类型为201 CREATED,则QNetworkReply返回空响应

时间:2017-06-30 10:24:15

标签: c++ qt http http-headers

我使用Qt将一些数据发送到服务器(我已经控制)。回复完成后,如果我将HTTP状态设置为200 OK,则响应完全符合我的预期,但如果我在服务器上将其更改为201 CREATED(应该如此),则调用reply->readAll()将返回空字节数组。

在REST客户端中使用完全相同的参数,URL和数据对此进行测试可以得到我期待的回复,因此我知道这不是服务器的问题。这是Qt中的错误,还是故意的?

我发出如下请求:

    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

    if(reply->error() == QNetworkReply::NoError){
        reply->open(QIODevice::ReadOnly);
        emit uploadCompleted(QString(reply->readAll()));
        reply->close();
    }else{
        emit uploadFailed("Server returned " + QString::number(statusCode).append(" ") + QString(reply->error()));
        reply->close();
    }
    toUpload.close();
    reply->deleteLater();

如果状态为200,则emit uploadCompleted调用会为我提供正确的数据。但是,如果状态为201,我什么都没有,只是空QByteArray

响应属于text/plain类型,只包含一行约50个字符左右的单行文本。

1 个答案:

答案 0 :(得分:0)

问题是我在尝试拨打reply->open之前打电话给readAll()。无论出于何种原因,如果在状态为200时读取之前打开它,则不会遇到任何问题。但是如果你在状态为201时这样做(或者可能是其他值,我还没有测试过),那么读取操作就会失败。