You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过QNetworkAccessManager正确调用Yandex翻译API发送POST请求

解决Yandex翻译API Qt调用无返回数据问题

问题根源分析

你的代码存在三个核心问题,导致无法获取API响应:

  • 错误使用QHttpMultiPart:Yandex翻译API仅接受纯JSON格式的请求体,无需多部分表单提交。
  • Authorization头位置错误:认证令牌应设置在QNetworkRequest对象上,而非QHttpPart中。
  • 重复读取响应数据:rep->readAll()调用两次,第一次已将响应数据流读取完毕,第二次返回空值。

修正后的完整代码

请求发送部分

QUrl url("https://translate.api.cloud.yandex.net/translate/v2/translate");
QNetworkAccessManager *mgr = new QNetworkAccessManager(this);

// 使用Qt5+新信号槽语法更安全
connect(mgr, &QNetworkAccessManager::finished, this, &myClass::onFinish);

// 构建符合API要求的JSON请求体
QJsonObject metaBody;
metaBody.insert("targetLanguageCode", "ru");
metaBody.insert("texts", QJsonArray({"Hello"})); // texts必须是字符串数组
metaBody.insert("folderId", "b1gdeb0pudkrac4ij1hd");

QJsonDocument jsonDoc(metaBody);
QByteArray postData = jsonDoc.toJson();

// 配置请求头
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", "Bearer LjJrImZGOkZzMy4"); // 替换为你的有效令牌

QNetworkReply *ans = mgr->post(request, postData);

响应处理部分

void myClass::onFinish(QNetworkReply *rep)
{
    // 一次性读取所有响应数据
    QByteArray responseData = rep->readAll();
    qDebug() << "API响应:" << responseData;

    // 解析JSON响应
    QJsonParseError parseError;
    QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData, &parseError);
    if (parseError.error != QJsonParseError::NoError) {
        qDebug() << "JSON解析失败:" << parseError.errorString();
        rep->deleteLater();
        return;
    }

    qDebug() << "格式化响应:" << jsonDoc.toJson(QJsonDocument::Indented);

    // 此处添加你的业务逻辑处理...

    // 必须释放QNetworkReply对象
    rep->deleteLater();
}

关键注意事项

  • texts字段格式:Yandex翻译API明确要求texts参数为字符串数组,直接传入单个字符串会导致请求格式错误,API可能无响应或返回格式错误。
  • 资源管理:QNetworkReply对象必须调用deleteLater()释放,避免内存泄漏。
  • 令牌有效性:确保使用的Bearer令牌是有效的,可通过官方提供的Python示例或API测试工具验证。

内容的提问来源于stack exchange,提问作者Roman Khudoberdin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:55:21