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
相关产品推荐
相关产品推荐

