使用Flutter调用Omie API时出现Error 500问题排查
排查Flutter调用Omie API返回500错误的问题
我用Flutter的http库调用Omie API时始终返回500错误,但用Postman调用同一API却能正常运行,以下是我的实现代码,请帮忙排查错误:
Future<bool> get() async { final uri = Uri.parse('https://app.omie.com.br/api/v1/produtos/pedido/'); Map<String, dynamic> data = { "call": "ConsultarPedido", "app_key": "3********1", "app_secret": "3*******b", "param": [ {"codigo_pedido": "9159824162"} ] }; http.Response response = await http.post( uri, headers: {"Content-type": "application/json"}, body: json.encode(data), ); print('statusCode: ${response.statusCode}'); if (response.statusCode == 200) { return true; } return false; }
排查方向及修改建议
- 对比请求体与Postman的差异:把Flutter中
json.encode(data)生成的字符串打印出来,和Postman里的请求体逐字符对比,重点检查字段名、参数值是否完全一致,是否存在多余转义或格式差异。 - 补充请求头:Postman默认会携带
Accept头,试试在Flutter的请求头中添加"Accept": "application/json",部分API需要该头才能返回正确响应。 - 显式指定编码:在
http.post中添加encoding: Encoding.getByName('utf-8'),确保请求体以UTF-8编码发送,避免编码不一致导致的解析错误。 - 打印响应详情:添加
print('Response body: ${response.body}'),Omie API返回的500错误通常会包含具体原因,比如参数错误、权限问题等,这是定位问题的关键。 - 验证密钥准确性:确认代码中的
app_key和app_secret与Postman中使用的完全一致,无多余空格或字符。
修改后的示例代码
Future<bool> get() async { final uri = Uri.parse('https://app.omie.com.br/api/v1/produtos/pedido/'); Map<String, dynamic> data = { "call": "ConsultarPedido", "app_key": "3********1", "app_secret": "3*******b", "param": [ {"codigo_pedido": "9159824162"} ] }; // 打印请求体,用于和Postman对比 print('Request Body: ${json.encode(data)}'); http.Response response = await http.post( uri, headers: { "Content-type": "application/json", "Accept": "application/json" }, body: json.encode(data), encoding: Encoding.getByName('utf-8'), ); print('Status Code: ${response.statusCode}'); // 打印响应内容,获取错误详情 print('Response Body: ${response.body}'); return response.statusCode == 200; }
内容的提问来源于stack exchange,提问作者Celso Spina
相关产品推荐
相关产品推荐

