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

Flutter Web调用LibreTranslate API返回400错误的问题求助

调用LibreTranslate API返回400错误的解决方案

问题分析

你的代码逻辑本身无语法错误,但返回400错误的核心原因是当前公共LibreTranslate服务已强制要求携带API密钥,此外也可能是请求参数未完全符合服务端校验规则。

修复步骤

1. 获取API密钥

前往LibreTranslate官方平台注册账号,获取免费API密钥(免费额度足以满足开发测试需求)。

2. 修改请求代码

在请求的JSON参数中添加api_key字段,同时优化错误提示逻辑,直接读取服务端返回的具体错误信息:

Future<void> _translateText() async {  
  String inputText = _textController.text.trim(); 
  if (inputText.isEmpty) {
    setState(() {
      _translatedText = "Error: No text provided for translation.";
    });
    return;
  }

  final url = Uri.parse("https://libretranslate.com/translate");
  // 替换为你获取到的API密钥
  const apiKey = "YOUR_API_KEY";

  try {
    final response = await http.post(
      url,
      headers: {"Content-Type": "application/json"},
      body: json.encode({
        "q": inputText,
        "source": "auto",
        "target": "en",
        "format": "text",
        "api_key": apiKey, // 新增API密钥字段
      }),
    );

    if (response.statusCode == 200) {
      final data = json.decode(response.body);
      if (data.containsKey("translatedText")) {
        setState(() {
          _translatedText = data["translatedText"];
        });
      } else {
        setState(() {
          _translatedText = "Error: Unexpected response format: ${response.body}";
        });
      }
    } else {
      // 解析服务端返回的具体错误信息
      final errorMsg = json.decode(response.body)["error"] ?? response.reasonPhrase;
      setState(() {
        _translatedText = "Error: Server responded with status code ${response.statusCode}. $errorMsg";
      });
    }
  } catch (e) {
    setState(() {
      _translatedText = "Error: Failed to connect to the server. Details: $e";
    });
  }   
}

3. 额外排查点

  • 确认输入文本未包含导致JSON编码失败的特殊字符
  • 检查网络环境是否存在代理、防火墙拦截请求

内容的提问来源于stack exchange,提问作者Brandon Osmar Nuñez Vazquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:43:27