【发布时间】:2020-10-02 07:21:31
【问题描述】:
我试图找出在 qt 中执行 get 请求时出了什么问题。
我的networkmanager 附加了以下插槽:
connect(mgr,SIGNAL(finished(QNetworkReply*)),this,SLOT(requestFinished(QNetworkReply*)));
connect(mgr, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(slotError(QNetworkReply::NetworkError)));
完成的请求是这样的:
void FirebaseInteractor::requestFinished(QNetworkReply *rep)
{
QVariant statusCode = rep->attribute( QNetworkRequest::HttpStatusCodeAttribute );
int status = statusCode.toInt();
if ( status != 200 )
{
QString reason = rep->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
qDebug() << "Pushnotification Request failed : " <<reason;
}
else{
qDebug() << "Pushnotification has been send: ";
}
if ( !statusCode.isValid() )
{
QString status = statusCode.toString(); // or status_code.toInt();
qDebug() << "Failing " << status;
int code = statusCode.toInt();
qDebug() << "Pushnotification Request failed invalid status code." << QString::number(code);
QString reason = rep->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
qDebug() << "reason " << reason;
return;
}
}
但是,Failing 和 reason 的状态始终为空,但其后没有任何值(我期待一个原因,例如超时、401 等)。
我也试过了:
int status = statusCode.toInt();
if ( status != 200 )
{
QString reason = rep->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
qDebug() << "Pushnotification Request failed : " <<reason;
}
else{
qDebug() << "Pushnotification has been send: ";
}
But all reasons/codes are empty.
I also added:
void FirebaseInteractor::slotError(QNetworkReply::NetworkError error)
{
qDebug() << "slotError" << error;
}
但这没有被调用。
如何找出问题所在?
【问题讨论】:
-
你想要完成什么?如果你想检查成功,只需打开
reply->error() -
@waqar 我想查看请求失败的原因(例如服务器返回 401、超时等)。目前我看不到构建失败的任何原因或状态码。
-
if ( !statusCode.isValid() )表示statusCode属于QMetaType::UnknownType,如果发生这种情况,将不会有任何关于status code的信息。即使请求失败,它也应该是有效的。 -
@Waqar 我怎样才能找出它失败的原因?它在一台电脑上工作,而不是在另一台电脑上工作
标签: c++ qt qnetworkaccessmanager qnetworkreply qnetworkrequest