cuốn sách gpt4 ai đã làm

Bài đăng QtCUrl không còn hoạt động (Linux hoạt động tốt...windows hoạt động tốt)

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 11:47:12 29 4
mua khóa gpt4 Nike

Tôi đã chạy chức năng này trong chương trình của mình từ năm ngoái (Linux và Windows).

Bây giờ tôi cần triển khai một tính năng mới và bản dựng mới của tôi không còn chạy nữa.

Tôi có các hàm CUrl khác sử dụng POST và kết quả cũng như vậy: không có vấn đề gì, nhưng hàm GET của tôi không có vấn đề gì.

Tôi có một máy tính khác (với Mint 19) và chương trình chạy rất mượt, nhưng trên máy tính của tôi (cũng với Mint 19), nó biên dịch không có vấn đề gì, nhưng nó khởi động Curl.exec (Tôi đang sử dụng Qtcurl Thư viện và các cuộc gọi nội bộ Curl_easy_perform) và không bao giờ quay trở lại.

Tôi đã cài đặt gói này: libcurl4-openssl-dev

Có thể biên dịch chương trình của tôi (Linux và Windows). Chương trình này chạy trên Windows.

Vấn đề của tôi chỉ là phiên bản mới trong Mint19.

Cài đặt còn thiếu gì?

Url QUrl("https://pos-api.ifood.com.br/oauth/token");
QUrlQuery q;
q.addQueryItem("client_id", id);
q.addQueryItem("client_secret", bí mật);
q.addQueryItem("grant_type","password");
q.addQueryItem("tên người dùng", người dùng);
q.addQueryItem("mật khẩu", mật khẩu);

url.setQuery(q);

QtCUrl::Tùy chọn lựa chọn;
opt[CURLOPT_URL] = url;
opt[CURLOPT_POST] = đúng;
opt[CURLOPT_FOLLOWLOCATION] = đúng;
opt[CURLOPT_FAILONERROR] = true;


opt[CURLOPT_SSL_VERIFYPEER]= sai // cửa sổ

Tiêu đề QStringList;
tiêu đề
<< "kiểm soát bộ đệm: không có bộ đệm"
<< "loại nội dung: ứng dụng/x-www-form-urlencoded";
opt[CURLOPT_HTTPHEADER] = tiêu đề;
val = cUrl.exec(opt); // VẤN ĐỀ TẠI ĐÂY!!!!

if (cUrl.lastError().isOk()) {

bool được rồi;
// json là một QString chứa dữ liệu JSON
QtJson::JsonObject result = QtJson::parse(val, ok).toMap();
token=result["access_token"].toString();


return token;
}
khác {
trở lại "";
}

câu trả lời hay nhất

Tôi đã thay đổi tất cả các phương pháp của mình.

Hàm đầu tiên là POST với một truy vấn.

    QString iFood_getToken2(Mã thông báo QString, int *expira, QString id, QString bí mật, người dùng QString, mật khẩu QString, máy chủ QString){
if(host!=tên máy chủ || !ifood_ativo){
qDebug() << "iFood_getToken2 saindo...";
trở lại "";
}

if(*expira>IFOOD_TASK){
*expira-=IFOOD_TASK;
// qDebug() << "expira " << *expira;
trả lại token; // token válido
}

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

QUrlQuery q;
q.addQueryItem("client_id", id);
q.addQueryItem("client_secret", bí mật);
q.addQueryItem("grant_type","password");
q.addQueryItem("tên người dùng", người dùng);
q.addQueryItem("mật khẩu", mật khẩu);
url.setQuery(q);

Yêu cầu QNetworkRequest(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setAttribution(QNetworkRequest::CacheLoadControlAttribution, QVariant(int(QNetworkRequest::AlwaysNetwork)));

QJsonObject json;

QNetworkAccessManager nam;

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

trong khi (!trả lời->isFinished())
{
qApp->processEvents();
}

QByteArray reply_data = reply->readAll();
QJsonDocument jsonr = QJsonDocument::fromJson(response_data);
trả lời->xóaLater();

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

trả về jsonr["access_token"].toString();
}

Tôi đã triển khai các tính năng mới này:

Có một triển khai mới của GET và PATCH

Vậy là từ nay mình không cần dùng đến thư viện CUrl nữa

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

Yêu cầu QNetworkRequest(url);
request.setAttribution(QNetworkRequest::CacheLoadControlAttribution, QVariant(int(QNetworkRequest::AlwaysNetwork)));

QString headerData = "người mang" + mã thông báo;
request.setRawHeader("Ủy quyền", headerData.toLocal8Bit());

QJsonObject json;

QNetworkAccessManager nam;

QNetworkReply *reply = nam.get(request);

trong khi (!trả lời->isFinished())
{
qApp->processEvents();
}

QByteArray reply_data = reply->readAll();
QJsonDocument json_response = QJsonDocument::fromJson(response_data);
trả lời->xóaLater();

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

trả về json_response;

}

int networkPatch(QString strUrl, mã thông báo QString, QJsonDocument json){
url QUrl(strUrl);

Yêu cầu QNetworkRequest(url);
request.setAttribution(QNetworkRequest::CacheLoadControlAttribution, QVariant(int(QNetworkRequest::AlwaysNetwork)));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

QString headerData = "người mang" + mã thông báo;
request.setRawHeader("Ủy quyền", headerData.toLocal8Bit());

QNetworkAccessManager nam;

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

trong khi (!trả lời->isFinished())
{
qApp->processEvents();
}

QByteArray reply_data = reply->readAll();
QJsonDocument json_response = QJsonDocument::fromJson(response_data);
trả lời->xóaLater();

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

trả lời trả lời->lỗi();

}

Về c++ - bài đăng QtCUrl không còn hoạt động (Linux hoạt động tốt...windows hoạt động tốt), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/57261587/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress