QtCUrl发布不再起作用(Linux Nok ... windows ok)

时间:2019-07-29 21:22:45

标签: c++ linux qt curl linux-mint

从去年开始(我在Linux和Windows中)就在我的程序中运行此功能。

现在我需要实现一个新功能,并且我的新版本不再运行。

我还有其他使用POST的CUrl函数,结果是相同的:否,但是我的GET函数还可以。

我有另一台计算机(使用Mint 19),该程序运行平稳,但是在我的计算机上(也使用Mint 19),编译正常,但是启动了curl.exec(我使用的是{{1} }库及其内部调用了Qtcurl),并且不再返回。

我已经安装了此软件包:libcurl4-openssl-dev

可以编译我的程序(Linux和Windows)。该程序在Windows上运行。

我的问题只是Mint19中的新版本。

缺少什么安装?

curl_easy_perform

1 个答案:

答案 0 :(得分:0)

我更改了所有方法。

第一个功能是带有查询的POST。

    QString iFood_getToken2(QString token, int *expira, QString id, QString secret, QString user, QString password, QString host){
    if(host!=hostname || !ifood_ativo){
        qDebug() << "iFood_getToken2 saindo...";
        return "";
    }

    if(*expira>IFOOD_TASK){
        *expira-=IFOOD_TASK;
       // qDebug() << "expira " << *expira;
        return token;   // token válido
    }

    QUrl url("https://pos-api.ifood.com.br/oauth/token");

    QUrlQuery q;
    q.addQueryItem("client_id", id); 
    q.addQueryItem("client_secret", secret); 
    q.addQueryItem("grant_type","password"); 
    q.addQueryItem("username",user); 
    q.addQueryItem("password",password); 
    url.setQuery(q);

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QVariant(int(QNetworkRequest::AlwaysNetwork)));

    QJsonObject json;

    QNetworkAccessManager nam;

    QNetworkReply *reply = nam.post(request, QJsonDocument(json).toJson());

    while (!reply->isFinished())
    {
        qApp->processEvents();
    }

    QByteArray response_data = reply->readAll();
    QJsonDocument jsonr = QJsonDocument::fromJson(response_data);
    reply->deleteLater();

    //qDebug() << "ifoodtoken2 " << jsonr["access_token"].toString();

    return jsonr["access_token"].toString();
}

我确实实现了这些新功能:

GET和PATCH有了新的实现

所以,从现在开始,我不再需要使用CUrl库

QJsonDocument networkGet(QString strUrl, QString token){
    QUrl url(strUrl);

    QNetworkRequest request(url);
    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QVariant(int(QNetworkRequest::AlwaysNetwork)));

    QString headerData = "bearer " + token;
    request.setRawHeader("Authorization", headerData.toLocal8Bit());

    QJsonObject json;

    QNetworkAccessManager nam;

    QNetworkReply *reply = nam.get(request);

    while (!reply->isFinished())
    {
        qApp->processEvents();
    }

    QByteArray response_data = reply->readAll();
    QJsonDocument json_response = QJsonDocument::fromJson(response_data);
    reply->deleteLater();

    //qDebug() << "networkGet " << json_response << reply->errorString() << headerData ;

    return json_response;

}

int networkPatch(QString strUrl, QString token, QJsonDocument json){
    QUrl url(strUrl);

    QNetworkRequest request(url);
    request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QVariant(int(QNetworkRequest::AlwaysNetwork)));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    QString headerData = "bearer " + token;
    request.setRawHeader("Authorization", headerData.toLocal8Bit());

    QNetworkAccessManager nam;

    QByteArray * _b_arr = new QByteArray (QString(json.toJson()).toLatin1());
    QBuffer *_qbf_upload =new QBuffer (_b_arr);
    QNetworkReply *reply = nam.sendCustomRequest(request,"PATCH",_qbf_upload);

    while (!reply->isFinished())
    {
        qApp->processEvents();
    }

    QByteArray response_data = reply->readAll();
    QJsonDocument json_response = QJsonDocument::fromJson(response_data);
    reply->deleteLater();

    qDebug() << "networkPatch " << reply->error() << json_response << reply->errorString() << headerData ;

    return reply->error();

}