Node.js 出现错误代码时,QNetworkReply readAll响应为空

Node.js 出现错误代码时,QNetworkReply readAll响应为空,node.js,qt,express,qnetworkreply,Node.js,Qt,Express,Qnetworkreply,当QNetworkReply::error()时,QNetworkReply::readAll的响应为空没有错。 这正常吗 我有一个Node+Express服务器,在http状态不同于200的情况下,它总是发送详细的描述;基于QNAM,我无法从我的Qt客户端获得此描述。Qt版本是5.3,OS Win 7 64b 这是我的代码,真的我不认为这能帮上忙 PendingRequest *Foo::sendMsg(QStandardItem *requestItem, HTTP_METHOD_ID me

当QNetworkReply::error()时,QNetworkReply::readAll的响应为空没有错。 这正常吗

我有一个Node+Express服务器,在http状态不同于200的情况下,它总是发送详细的描述;基于QNAM,我无法从我的Qt客户端获得此描述。Qt版本是5.3,OS Win 7 64b

这是我的代码,真的我不认为这能帮上忙

PendingRequest *Foo::sendMsg(QStandardItem *requestItem, HTTP_METHOD_ID method, QString path)
{
    PendingRequest *pReq = new PendingRequest(method);

    QString url = QString("https://%1:%2%3").arg(host, QString::number(port), path);
    QNetworkRequest qNetReq = QNetworkRequest(QUrl(url));

    //set headears
    qNetReq.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, HttpUserAgent);
    qNetReq.setRawHeader("Connection", "Keep-Alive");
    if(!credentials.isEmpty())
    {
        qNetReq.setRawHeader("Authorization", QByteArray("Basic ")+credentials);
    }
    if(!sessionId.isEmpty())
    {
        qNetReq.setRawHeader("Session-Id", sessionId);
    }

    //send request
    QNetworkReply *reply;
    if(method == HTTP_METHOD_ID::POST)
    {
        qNetReq.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
        QByteArray data = outHandlerList[outHandlerIndex](requestItem);
        reply = netManager.post(qNetReq, data);
    }
    else
    {
        reply = netManager.get(qNetReq);
    }

    connect(reply, SIGNAL(finished()), this, SLOT(handleResponse()));
    connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(handleSslErrors(QList<QSslError>)));

    return pReq;
}
PendingRequest*Foo::sendMsg(QStandardItem*requestItem、HTTP_METHOD_ID METHOD、QString路径)
{
PendingRequest*pReq=新的PendingRequest(方法);
QString url=QString(“https://%1:%2%3”).arg(主机,QString::number(端口),路径);
QNetworkRequest qNetReq=QNetworkRequest(QUrl(url));
//竖起耳朵
setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader,HttpUserAgent);
qNetReq.setRawHeader(“连接”,“保持活动”);
如果(!credentials.isEmpty())
{
qNetReq.setRawHeader(“授权”,QByteArray(“基本”)+凭证);
}
如果(!sessionId.isEmpty())
{
qNetReq.setRawHeader(“会话Id”,会话Id);
}
//发送请求
QNetworkReply*回复;
if(method==HTTP\u method\u ID::POST)
{
setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader,“应用程序/json”);
QByteArray数据=outHandlerList[outHandlerIndex](请求项);
reply=netManager.post(qNetReq,数据);
}
其他的
{
reply=netManager.get(qNetReq);
}
连接(应答,信号(finished()),此,插槽(handleResponse());
连接(应答、信号(sslErrors(QList))、此、插槽(handleSslErrors(QList));
返回pReq;
}
这是我处理回应的地方:

void Foo::handleResponse()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());

    if(reply->hasRawHeader("Session-Id"))
        sessionId = reply->rawHeader("Session-Id");

    PendingRequest *pReq = pendingRequestMap.contains(reply) ? pendingRequestMap.take(reply) : 0;
    Q_ASSERT(pReq);

    QStandardItem *responseItem = 0;
    QString error;

    if(reply->error() != QNetworkReply::NoError)
    {
        qDebug() << "readAll: ", reply->readAll(), "error: ", reply->errorString();
        error = reply->errorString();
    }
    else
    {
        responseItem = inHandlerList[pReq->inHandlerIndex](reply, error, pReq);
    }

    reply->deleteLater();
}
void Foo::handleResponse()
{
QNetworkReply*reply=qobject_cast(发送方());
if(回复->hasRawHeader(“会话Id”))
sessionId=reply->rawsheader(“会话Id”);
PendingRequest*pReq=pendingRequestMap.contains(reply)?pendingRequestMap.take(reply):0;
Q_断言(pReq);
QStandardItem*responseItem=0;
QString错误;
如果(回复->错误()!=QNetworkReply::无错误)
{
qDebug()readAll(),“error:”,reply->errorString();
error=reply->errorString();
}
其他的
{
responseItem=inHandlerList[pReq->inHandlerIndex](回复,错误,pReq);
}
回复->删除稍后();
}
非常感谢您的帮助。

来自:

QByteArray QIODevice::readAll()


这是一个重载函数

从设备读取所有可用数据,并将其作为 QByteArray

此功能无法报告错误返回空的 QByteArray()可能意味着当前没有可用的数据 正在读取,或发生错误


“这是一个重载函数”我认为这是文档中的一个bug。。。QIODevice中只有一个readAll函数,read是一个重载函数。但这不是重点。我该如何改变这种行为,我的意思是,即使http状态不是200 OK,也要让QNetworkReply读取所有接收到的数据?@YovanisSantiestebanAlganza你能找到解决方案吗?不,现在我使用的是原因的http头(reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute)。toString()。请发布代码,如何发送请求和接收数据?这可能会有帮助。