我使用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个字符左右的单行文本。
答案 0 :(得分:0)
问题是我在尝试拨打reply->open
之前打电话给readAll()
。无论出于何种原因,如果在状态为200时读取之前打开它,则不会遇到任何问题。但是如果你在状态为201时这样做(或者可能是其他值,我还没有测试过),那么读取操作就会失败。