我在 flutter 中收到“SocketException:操作系统错误:连接被拒绝”,但登录时浏览器却没有收到

问题描述 投票:0回答:4

我有一个使用 Auth 运行的 PHP laravel 后端。如何从 flutter 登录?

我测试了它的注册和登录,使用 Laravel Blade 视图,然后使用一个简单的 HTML 表单,它起作用了。我现在尝试从我的 flutter 应用程序登录,但总是遇到相同的异常:

“SocketException:操作系统错误:连接被拒绝,errno = 111,地址 = 127.0.0.1,端口 = 41978”

除了每次尝试时端口都会增加。

我首先从桌面上的文件进行了这个简单的调用并成功登录:

    <form method="POST" action="http://127.0.0.1:8000/login">
        <input id="email" name="email" type="email" />
        <input id="password" name="password" type="password" />
        <button type="submit">login</button>
    </form>

这是我的flutter HTTP请求代码:

    http.Response webMessage;
    webMessage = await http.post('http://127.0.0.1:8000/login',
        body: {
            'email': myUser,
            'password': myPass,
        },
        headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Content-Type': 'application/x-www-form-urlencoded'
        },
        encoding: Encoding.getByName('utf-8'),
    ).timeout(_timeout);

我还尝试了 Accept 和 Content-Type: 'application/json'。发送一个字符串,一个地图。

我也在VerifyCsrfToken中间件中设置了这个:

    protected $except = [
        'login',
    ];

我希望该请求能够成功登录用户,并使用会话和令牌 cookie 进行响应,以便在将来的请求中使用。

谢谢!

laravel api http flutter
4个回答
5
投票

如果您使用 Android 模拟器并尝试访问计算机中的本地服务器,则 IP 不应该是 127.0.0.1 也不应该是 localhost,因为服务器不在手机中。尝试使用 10.0.2.2,如此处所述。


1
投票

另一种方法可能是使用您的 Android 调试桥 (ADB)。

在任务管理器中找到您使用的 adb 的路径。打开控制台并导航到该文件夹。您可以在其中执行以下命令,将虚拟设备端口映射到计算机端口:

adb reverse tcp:3001 tcp:8000
adb reverse tcp:(phones port) tcp:8000(computers port)

那么你应该可以使用

127.0.0.1
localhost


0
投票

我遇到了同样的问题,.Net Core Web Api 项目作为 VS19 中的后端服务在调试模式下运行,在 IIS Express 上执行,同时从 android 模拟器发送 Flutter 项目的 http 请求。

要解决此问题,请转到您的 Web.Api 项目属性,然后转到“调试”选项卡,然后修改 AppUrl 的端口:http://localhost:[您的端口],然后将您的 android baseUrl 设置为 http://10.0.2.2: http 请求的 [your 端口]。它对我有用,希望对其他人也有帮助。


0
投票

要确保您的 Laravel 服务器正在运行并且可以从模拟器访问,请按照以下步骤操作:

启动 Laravel 服务器:

php artisan serve --host=0.0.0.0 --port=8000

使用

--host=0.0.0.0
可以在本地网络上访问服务器,这是从模拟器连接所必需的。

将 127.0.0.1 替换为 10.0.2.2:

在您的 Flutter 项目中,请确保使用

10.0.2.2
而不是
127.0.0.1
从模拟器访问 Laravel 服务器。

此设置允许您的模拟器与 Laravel 后端服务器进行通信。

© www.soinside.com 2019 - 2024. All rights reserved.