QT 请求 SaleForse,状态代码为 0
QT Request to SaleForse with status code 0
我有一个独立的应用程序,它有一个具有 2 个 post 请求函数的功能,首先是从 salesforse 获取令牌,其次是发送我的 json 数据,当我在我的计算机上执行它的应用程序时发送请求就好了,但是在其他计算机上 post 请求的状态代码是 0。没有代码描述,什么也没有。
为什么它会这样,以及如何理解问题所在(如错误描述)。
第一个:
void Connector::SendFirstPostRequest()
{
//QNetworkAccessManager *NetManager = new QNetworkAccessManager(this);
QNetworkAccessManager NetManager;
QUrlQuery postData;
QObject Connector;
QString FURL = "https://login.salesforce.com/services/oauth2/token";
QUrl URLNeeded(FURL);
QNetworkRequest request(URLNeeded);
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));
QNetworkReply *reply = NetManager.post(request, postD.toString(QUrl::FullyEncoded).toUtf8());
while (!reply->isFinished())
{
qApp->processEvents();
}
FirstPostFinished = reply->isFinished();
QByteArray ResponceData = reply->readAll();
QJsonDocument rDoc = QJsonDocument::fromJson(ResponceData);
QJsonObject rJObject = rDoc.object();
QJsonValue AccessToke = rJObject.value("access_token");
AcessToken = AccessToke.toString();
FirstPostCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "STATUS: "<< FirstPostCode;
// qDebug() << reply->header();
qDebug() << "POST REQUEST SENT";
reply->deleteLater();
}
第二个:
void Connector::SendSecondPostRequest()
{
QNetworkAccessManager NetManager;
QUrlQuery postData;
QObject Connector;
QUrl URLNeeded(URL);
QJsonObject json;
QJsonDocument doc(json);
QNetworkRequest request(URLNeeded);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
auto header = QString("Bearer %1").arg(AcessToken);
request.setRawHeader(QByteArray("Authorization"), header.toUtf8());
QNetworkReply *reply = NetManager.post(request, doc.toJson());
qDebug()<<doc;
while (!reply->isFinished())
{
qApp->processEvents();
}
QByteArray ResponceData = reply->readAll();
QJsonDocument jDoc = QJsonDocument::fromJson(ResponceData);
qDebug() << jDoc;
DebugLine = QString(jDoc.toJson(QJsonDocument::Compact));
SecPostCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "STATUS: "<<SecPostCode;
qDebug() << "POST REQUEST SENT";
reply->deleteLater();
}
以及操作这两个请求的函数
void MainWindow::SendPost()
{
if(Conn->SecondsToRequest == 10)
{
Conn->SendFirstPostRequest();
while(!Conn->FirstPostFinished)
{
qDebug()<<"First post not finished yet";
}
Conn->SendSecondPostRequest();
Conn->SecondsToRequest = 0;
}
}
我曾经遇到过状态码0的问题,那是因为请求超时。
如果您收到状态代码 0,请尝试增加请求的超时时间。
谢谢大家,我使用 Qt MessageHandler 写入日志文件,并且 TLS 初始化失败,因此安装 OpenSSL 1.1.1h 和 Microsoft Visual C++ 2010 SP1 Redistributable 解决了问题。
我有一个独立的应用程序,它有一个具有 2 个 post 请求函数的功能,首先是从 salesforse 获取令牌,其次是发送我的 json 数据,当我在我的计算机上执行它的应用程序时发送请求就好了,但是在其他计算机上 post 请求的状态代码是 0。没有代码描述,什么也没有。 为什么它会这样,以及如何理解问题所在(如错误描述)。
第一个:
void Connector::SendFirstPostRequest()
{
//QNetworkAccessManager *NetManager = new QNetworkAccessManager(this);
QNetworkAccessManager NetManager;
QUrlQuery postData;
QObject Connector;
QString FURL = "https://login.salesforce.com/services/oauth2/token";
QUrl URLNeeded(FURL);
QNetworkRequest request(URLNeeded);
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));
QNetworkReply *reply = NetManager.post(request, postD.toString(QUrl::FullyEncoded).toUtf8());
while (!reply->isFinished())
{
qApp->processEvents();
}
FirstPostFinished = reply->isFinished();
QByteArray ResponceData = reply->readAll();
QJsonDocument rDoc = QJsonDocument::fromJson(ResponceData);
QJsonObject rJObject = rDoc.object();
QJsonValue AccessToke = rJObject.value("access_token");
AcessToken = AccessToke.toString();
FirstPostCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "STATUS: "<< FirstPostCode;
// qDebug() << reply->header();
qDebug() << "POST REQUEST SENT";
reply->deleteLater();
}
第二个:
void Connector::SendSecondPostRequest()
{
QNetworkAccessManager NetManager;
QUrlQuery postData;
QObject Connector;
QUrl URLNeeded(URL);
QJsonObject json;
QJsonDocument doc(json);
QNetworkRequest request(URLNeeded);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
auto header = QString("Bearer %1").arg(AcessToken);
request.setRawHeader(QByteArray("Authorization"), header.toUtf8());
QNetworkReply *reply = NetManager.post(request, doc.toJson());
qDebug()<<doc;
while (!reply->isFinished())
{
qApp->processEvents();
}
QByteArray ResponceData = reply->readAll();
QJsonDocument jDoc = QJsonDocument::fromJson(ResponceData);
qDebug() << jDoc;
DebugLine = QString(jDoc.toJson(QJsonDocument::Compact));
SecPostCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "STATUS: "<<SecPostCode;
qDebug() << "POST REQUEST SENT";
reply->deleteLater();
}
以及操作这两个请求的函数
void MainWindow::SendPost()
{
if(Conn->SecondsToRequest == 10)
{
Conn->SendFirstPostRequest();
while(!Conn->FirstPostFinished)
{
qDebug()<<"First post not finished yet";
}
Conn->SendSecondPostRequest();
Conn->SecondsToRequest = 0;
}
}
我曾经遇到过状态码0的问题,那是因为请求超时。 如果您收到状态代码 0,请尝试增加请求的超时时间。
谢谢大家,我使用 Qt MessageHandler 写入日志文件,并且 TLS 初始化失败,因此安装 OpenSSL 1.1.1h 和 Microsoft Visual C++ 2010 SP1 Redistributable 解决了问题。