从去年开始(我在Linux和Windows中)就在我的程序中运行此功能。
现在我需要实现一个新功能,并且我的新版本不再运行。
我还有其他使用POST的CUrl函数,结果是相同的:否,但是我的GET函数还可以。
我有另一台计算机(使用Mint 19),该程序运行平稳,但是在我的计算机上(也使用Mint 19),编译正常,但是启动了curl.exec(我使用的是{{1} }库及其内部调用了Qtcurl
),并且不再返回。
我已经安装了此软件包:libcurl4-openssl-dev
可以编译我的程序(Linux和Windows)。该程序在Windows上运行。
我的问题只是Mint19中的新版本。
缺少什么安装?
curl_easy_perform
答案 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();
}