SocketException:在 macOS 上使用颤振应用程序连接失败(操作系统错误:不允许操作,errno = 1)

Posted

技术标签:

【中文标题】SocketException:在 macOS 上使用颤振应用程序连接失败(操作系统错误:不允许操作,errno = 1)【英文标题】:SocketException: Connection failed (OS Error: Operation not permitted, errno = 1) with flutter app on macOS 【发布时间】:2021-04-04 02:53:33 【问题描述】:

我的 Flutter 应用程序中有以下代码,其中 MyDataLoader 是一个从 main.dart 启动的小部件

代码:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyDataLoader extends StatefulWidget 
  @override
  _MyDataLoaderState createState() => _MyDataLoaderState();


class _MyDataLoaderState extends State<MyDataLoader> 
  void getData() async 
    final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
    print(response);
  

  @override
  void initState() 
    super.initState();
    getData();
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Text('MyDataLoader screen'),
    );
  

问题: 以上代码的灵感来自https://flutter.dev/docs/cookbook/networking/fetch-data。 MyDataLoader 小部件加载时出现以下错误:

[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常: SocketException:连接失败(操作系统错误:不允许操作, errno = 1),地址 = jsonplaceholder.typicode.com,端口 = 443

上述错误当然是因为我的小部件加载时调用了以下代码行。

最终响应 = 等待 http.get('https://jsonplaceholder.typicode.com/albums/1');

但是,如果我在浏览器上打开 https://jsonplaceholder.typicode.com/albums/1,我可以看到它有我希望在响应中收到的虚拟 json。这意味着我可以很好地连接到互联网。

我在 macOS Big Sur 版本 11.1 上运行我的应用程序。

我做错了什么?我是否需要声明一些权限,我的应用才能从 macOS 环境访问互联网?

【问题讨论】:

是的。看起来您在 macOS 应用程序配置中缺少某些内容。 flutter.dev/desktop#setting-up-entitlements 哦,是的。我缺少权限@ashu 只需将&lt;key&gt;com.apple.security.network.client&lt;/key&gt; &lt;true/&gt; 添加到权利文件即可解决。谢谢@阿舒 【参考方案1】:

macOS 需要您请求特定权限才能访问网络。为此,请打开 ma​​cos/Runner/DebugProfile.entitlements 并添加以下键值对。

<key>com.apple.security.network.client</key>
<true/>

然后在 ma​​cos/Runner/Release.entitlements 中执行相同的操作。

您可以在Desktop support for Flutter 文档中阅读更多相关信息。

【讨论】:

非常感谢!...这为我节省了几个小时和很多挫折!

以上是关于SocketException:在 macOS 上使用颤振应用程序连接失败(操作系统错误:不允许操作,errno = 1)的主要内容,如果未能解决你的问题,请参考以下文章

颤振:异常:SocketException:仅在iOS模拟器上连接失败

Java 聊天室 - 为啥我收到 SocketException?

绑定时 C# 异步 SocketException

java.net.socketexception 连接重置由对等套接字写入错误通过 Jenkins 在 Tomcat7 上部署战争时(使用 Maven)

Web 测试失败并出现 SocketException

为啥我在部署应用程序时收到 java.net.SocketException: Connection reset?