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

使用Eden AI API生成图片时遇ClientException连接关闭错误求助

问题:调用Eden AI图片生成API时出现连接中断异常

调用Eden AI的图片生成API时,程序抛出Unhandled Exception: ClientException: Connection closed while receiving data异常,错误日志和相关代码如下:

错误日志

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: ClientException: Connection closed while receiving data, uri=https://api.edenai.run/v2/image/generation
E/flutter ( 4656): #0      IOClient.send.<anonymous closure> (package:http/src/io_client.dart:110:13)
E/flutter ( 4656): #1      Stream.handleError.<anonymous closure> (dart:async/stream.dart:931:16)
E/flutter ( 4656): #2      _HandleErrorStream._handleError (dart:async/stream_pipe.dart:269:17)
E/flutter ( 4656): #3      _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:157:13)
E/flutter ( 4656): #4      _HttpClientResponse.listen.<anonymous closure> (dart:_http/http_impl.dart:720:16)
E/flutter ( 4656): #5      _RootZone.runBinaryGuarded (dart:async/zone.dart:1606:10)
E/flutter ( 4656): #6      _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:358:15)
E/flutter ( 4656): #7      _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:376:7)
E/flutter ( 4656): #8      _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:280:7)
E/flutter ( 4656): #9      _ForwardingStreamSubscription._addError (dart:async/stream_pipe.dart:128:11)
E/flutter ( 4656): #10     _addErrorWithReplacement (dart:async/stream_pipe.dart:176:8)
E/flutter ( 4656): #11     _HandleErrorStream._handleError (dart:async/stream_pipe.dart:274:11)
E/flutter ( 4656): #12     _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:157:13)
E/flutter ( 4656): #13     _RootZone.runBinaryGuarded (dart:async/zone.dart:1606:10)
E/flutter ( 4656): #14     _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:358:15)
E/flutter ( 4656): #15     _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:376:7)
E/flutter ( 4656): #16     _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:280:7)
E/flutter ( 4656): #17     _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:788:19)
E/flutter ( 4656): #18     _StreamController._addError (dart:async/stream_controller.dart:666:7)
E/flutter ( 4656): #19     _StreamController.addError (dart:async/stream_controller.dart:620:5)
E/flutter ( 4656): #20     _HttpParser._reportBodyError (dart:_http/http_parser.dart:1200:22)
E/flutter ( 4656): #21     _HttpParser._onDone (dart:_http/http_parser.dart:898:9)
E/flutter ( 4656): #22     _RootZone.runGuarded (dart:async/zone.dart:1582:10)
E/flutter ( 4656): #23     _BufferingStreamSubscription._sendDone.sendDone (dart:async/stream_impl.dart:392:13)
E/flutter ( 4656): #24     _BufferingStreamSubscription._sendDone (dart:async/stream_impl.dart:402:7)
E/flutter ( 4656): #25     _BufferingStreamSubscription._close (dart:async/stream_impl.dart:291:7)
E/flutter ( 4656): #26     _SyncStreamControllerDispatch._sendDone (dart:async/stream_controller.dart:792:19)
E/flutter ( 4656): #27     _StreamController._closeUnchecked (dart:async/stream_controller.dart:647:7)
E/flutter ( 4656): #28     _StreamController.close (dart:async/stream_controller.dart:640:5)
E/flutter ( 4656): #29     _Socket._onError (dart:io-patch/socket_patch.dart:2471:19)
E/flutter ( 4656): #30     _RootZone.runBinaryGuarded (dart:async/zone.dart:1606:10)
E/flutter ( 4656): #31     _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:358:15)
E/flutter ( 4656): #32     _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:373:9)
E/flutter ( 4656): #33     _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:280:7)
E/flutter ( 4656): #34     _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:788:19)
E/flutter ( 4656): #35     _StreamController._addError (dart:async/stream_controller.dart:666:7)
E/flutter ( 4656): #36     _StreamController.addError (dart:async/stream_controller.dart:620:5)
E/flutter ( 4656): #37     _RawSecureSocket._reportError (dart:io/secure_socket.dart:888:19)
E/flutter ( 4656): #38     _RawSecureSocket._pushAllFilterStages (dart:io/secure_socket.dart:1155:9)
E/flutter ( 4656): <asynchronous suspension>
E/flutter ( 4656): #39     _RawSecureSocket._tryFilter (dart:io/secure_socket.dart:1006:25)
E/flutter ( 4656): <asynchronous suspension>

相关代码

static Future<void> getImage(String question) async {
    final res = await http.post(Uri.parse('https://api.edenai.run/v2/image/generation'),
        headers: {
          HttpHeaders.contentTypeHeader: ' application/json',
          HttpHeaders.authorizationHeader: 'Bearer $apiKey'
        },
        body: jsonEncode({
          "providers": "openai,deepai,stabilityai",
          "text": "A huge red ballon flying outside the city.",
          "resolution": "512x512",
          "num_images": 2
        }));

    final data = await jsonDecode(res.body);

    log('res: ${res.body} + ${res.statusCode}');
  }

解决办法

1. 修复请求头的Content-Type错误

原代码中Content-Type的值前面有多余空格' application/json',这会导致服务器无法正确解析请求格式,修改为:

HttpHeaders.contentTypeHeader: 'application/json',

2. 设置请求超时时间

图片生成API处理时间较长,默认超时可能不足以完成响应,使用自定义http.Client设置超时:

static Future<void> getImage(String question) async {
  final client = http.Client()..idleTimeout = const Duration(minutes: 2);
  try {
    final res = await client.post(
      Uri.parse('https://api.edenai.run/v2/image/generation'),
      headers: {
        HttpHeaders.contentTypeHeader: 'application/json',
        HttpHeaders.authorizationHeader: 'Bearer $apiKey'
      },
      body: jsonEncode({
        "providers": "openai,deepai,stabilityai",
        "text": "A huge red ballon flying outside the city.",
        "resolution": "512x512",
        "num_images": 2
      }),
    ).timeout(const Duration(minutes: 2));

    final data = jsonDecode(res.body);
    log('res: ${res.body} + ${res.statusCode}');
  } on ClientException catch (e) {
    log('连接异常: ${e.message}');
  } on TimeoutException catch (e) {
    log('请求超时: ${e.message}');
  } catch (e) {
    log('其他异常: ${e.toString()}');
  } finally {
    client.close();
  }
}

3. 减少并发provider数量

同时调用3个provider会增加响应数据量和服务器处理压力,可能导致连接提前关闭。先尝试只使用一个provider测试:

"providers": "openai",

4. 添加异常捕获逻辑

原代码未处理任何异常,导致未捕获的ClientException崩溃,在代码中添加try-catch可以捕获异常并定位问题。

内容的提问来源于stack exchange,提问作者Manish sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:09:51