Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对SaleForse的QT请求,状态代码为0_Qt_Http_Post_Salesforce_Http Post - Fatal编程技术网

对SaleForse的QT请求,状态代码为0

对SaleForse的QT请求,状态代码为0,qt,http,post,salesforce,http-post,Qt,Http,Post,Salesforce,Http Post,我有一个独立的应用程序,它有一个带有2个post请求函数的函数,第一个用于从salesforse获取令牌,第二个用于发送json数据,当我在我的计算机上执行应用程序时,它的发送请求很好,但在其他计算机上,post请求的状态代码为0。没有代码描述,什么都没有。 为什么会这样,以及如何理解问题所在(如错误描述) 第一个: void Connector::SendFirstPostRequest() { //QNetworkAccessManager *NetManag

我有一个独立的应用程序,它有一个带有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连接器::SendFirstPostRequest()
{
//QNetworkAccessManager*NetManager=新的QNetworkAccessManager(此);
QNetworkAccessManager NetManager;
QUrlQuery postData;
QObject连接器;
QString FURL=”https://login.salesforce.com/services/oauth2/token";
所需数量(卷);
QNetworkRequest请求(需要URL);
setHeader(QNetworkRequest::ContentTypeHeader,QVariant(“application/x-www-form-urlencoded”);
QNetworkReply*reply=NetManager.post(请求,postD.toString(QUrl::FULLYENCODE).toUtf8());
而(!reply->isFinished())
{
qApp->processEvents();
}
FirstPostFinished=reply->isFinished();
QByteArray ResponceData=reply->readAll();
QJsonDocument rDoc=QJsonDocument::fromJson(ResponceData);
QJsonObject rJObject=rDoc.object();
QJsonValue AccessToke=rJObject.value(“访问令牌”);
AcessToken=AccessToke.toString();
FirstPostCode=reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

qDebug()我曾经遇到状态代码0问题,原因是请求超时。
如果您正在获得状态代码0,那么尝试增加您的请求超时。

< P>谢谢,我用Qt MessageHandler来编写日志文件,并且有一个TLS初始化失败了,所以问题通过安装OpenSSL 1.1.1H和微软Visual C++ 2010 SP1重新分发来解决。(!reply->isFinished())
而不是连接到
finished
信号?第二次调用中的URL是什么?您应该从登录的响应中读取访问令牌和实例URL(请参阅),然后将其用作所有后续调用的基线。构造类似于
{instance\u URL}/services/data/v49.0/sobjects/Account
,然后发布您要创建的帐户的JSON。@第二次发布请求是使用其他url发布的,它在我的电脑上工作(所有数据都在SalesForce上接收),但在其他电脑上我收到此0响应code@JarMan我正在使用while(!reply->isFinished())因为一个类连接器中有两个post请求方法,而主窗口中有两个SendPost方法,所以我无法从第一个post请求连接到第二个回复->isFinished(),所以您的答案没有意义。为什么在一个类中有两个post请求很重要?您仍然可以使用connect()。我很高兴你解决了这个问题,但它是如何通过https进行第一次呼叫(登录)而不是第二次呼叫的?疯狂。@eyescream事实上,在第一次尝试时,我制作了调试标签,只设置了状态码,只设置了第二次请求,所以这让我很困惑,后来当我编写日志时,我发现它们都失败了。明白了:)谢谢你回到我身边,这会让我在晚上感到厌烦:)
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;
    }

}