Dart Http 包请求超时

Posted

技术标签:

【中文标题】Dart Http 包请求超时【英文标题】:Dart Http Package request timeout 【发布时间】:2020-03-16 21:12:35 【问题描述】:

在我的颤振应用程序中使用http 包时,我遇到了一个小问题。我正在本地主机上进行测试,当我使用 http.post 在数据库中发布某些内容时,当服务器未运行时,它不会在默认时间(即我认为是 60 秒)返回响应。当我在超时内启动 apache 和 mysql 服务时,它会将数据发布到服务器中。有什么办法可以减少dart http包中http请求的超时时间?或者有什么替代方案吗?

【问题讨论】:

【参考方案1】:

这是 http

final response = await http.post(Url).timeout(Duration(seconds: 5));

这是 Dio 包(建议测试此包)

BaseOptions options = new BaseOptions(
    baseUrl: baseUrl,
    connectTimeout: 10000, //10 seconds
    receiveTimeout: 10000,
   );

Dio dio = new Dio(options);

Response<dynamic> response = await dio.post(url, data: mapData);

【讨论】:

【参考方案2】:

您有两种选择。

减少 HttpClient 的超时时间

final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 10);

这将适用于同一客户端发出的所有请求。如果请求超过此超时,则抛出SocketException

设置每个请求的超时时间 您可以使用 Future.timeout 方法为任何 Future 设置超时。

try 
  ..
  final request = await client.get(...);
  final response = await request.close().timeout(const Duration(seconds: 10));
  // more code
 on TimeoutException catch (e) 
  // handle timeout

【讨论】:

以上是关于Dart Http 包请求超时的主要内容,如果未能解决你的问题,请参考以下文章

在 .net Rider IDE 中恢复解决方案的 nuget 包:无法下载包 `x` 对 GET `x` 的 HTTP 请求在 100000 毫秒后超时

ping对方的IP,为啥总是显示“请求超时”?

HTTP超时问题

http超时请求设置

http超时请求设置

35.伪造请求超时的ICMP数据包