SocketException:操作系统错误:使用django后端,连接被拒绝,errno = 111。

Har*_*put 0 django pythonanywhere django-rest-framework flutter

我正在使用Django rest-framework开发一个Flutter应用程序。注册api在Postman中运行良好,但是从flutter应用程序成功注册后,它会显示上述错误。该请求已通过https地址发送。

删除了csrf。没发生什么事。

请求:

var data = {'email':signupemailidcontroller.text,
            'password1':passwordcontroller.text,
            'password2':confirmpasswordcontroller.text,
           };
        //http request here
        await http.post(websitesignupurl,
                        headers: headers,
                        body: json.encode(data))
          .then((onResponse){
            print(onResponse.body);
          }).catchError((onerror){
            print(onerror.toString());
        });
Run Code Online (Sandbox Code Playgroud)

控制台中的输出:

SocketException:操作系统错误:连接被拒绝,errno = 111

我希望这个请求的响应是一个包含用户和令牌的Json对象。

spy*_*nda 15

我去了终端并使用ifconfig命令

我得到了我的 IP 地址: 192.168.0.109

在此处输入图片说明

然后我在 flutter app http 请求中简单地用我的“localhost”替换了这个 IP 地址。它就像一个魅力!

  • 在终端内运行 ipconfig 命令给了我 IPV4 地址:`192.168.1.101` 然后我只需在 flutter 应用程序 `http` 请求中用我的 `127.0.0.1:8000` 替换这个 IP 地址。它就像一个魅力!对于“Laravel”:“php artisanserve --host 192.168.1.101 --port 80” (4认同)

小智 15

我在真实设备中运行时遇到了同样的问题,仅更改 API 链接中的 IP 不起作用\xc2\xb4。

\n

我的解决方案是使用以下命令运行服务器:

\n
manage.py runserver 0.0.0.0:8000\n\n
Run Code Online (Sandbox Code Playgroud)\n

然后将您的机器 IP 传递给 API 链接而不是 localhost,如下例所示:

\n
http://192.168.0.67:8000\n
Run Code Online (Sandbox Code Playgroud)\n


tar*_*ngh 9

除了 Rohan 的回答,您还可以阅读:

无法使用 Flutter 调用本地主机,随机端口被分配给 HTTP GET 调用

我试图使用本地服务器在物理设备上运行我的应用程序,为此我必须使用下面提到的命令,请记住根据您自己的端口号更改端口号

adb reverse tcp:3001 tcp:3001
Run Code Online (Sandbox Code Playgroud)

正如@maheshmnj 指出的,这个命令正在将你手机的 3001 端口重定向到你电脑的 3001 端口。如果你想将手机的 2000 端口重定向到电脑的 3000 端口,那么你可以这样做 adb reverse tcp:2000 tcp:3000

您还可以通过下面提到的页面https://developer.android.com/studio/command-line/adb.html阅读有关 adb 和网络的信息


Tat*_*dzi 8

尝试添加<uses-permission android:name="android.permission.INTERNET"/>到您的清单中。这为我解决了这个问题。


Mar*_*mba 8

当端点不正确或您的主机和服务器后端(示例 Laravel API)不共享相同的 IP 地址时,就会出现此问题。

解决办法是。

  1. 将您的工作区(计算机、模拟器、设备)连接到同一网络中。
  2. 通过在终端上输入查找您的 IP ifconfig
  3. IP ADDRESS如果您使用 Laravel 构建 API,请启动指定到您计算机的服务器, sudophp artisan serve --host YOUR_COMPUTER_IP_ADDRESS --port NUMBER

例子:

`sudo php artisan serve --host 192.168.1.11 --port 80`
Run Code Online (Sandbox Code Playgroud)
  1. 在 Postman 或类似的应用程序和类型中测试您的端点http://192.168.1.11:80/Your_Route
  2. 如果一切正常,您可以使用应用程序运行。去!!!


Rah*_*aee 7

  • 如果在 localhost 而不是 localhost 使用您网络的 IP
  • 提示:在cmd运行中查找ipipconfig并获取ipv4

1:示例:

await http.post("http://127.68.34.23/wp-json/...",
                    headers: headers,
                    body: json.encode(data))
Run Code Online (Sandbox Code Playgroud)

如果在服务器中,在 url 中写入 main 的 url


小智 7

我知道这个问题太老了,但我会回答这个问题,因为这可能对遇到这个问题的人有帮助。

如果没有更多细节,我无法给出具体的解决方案。但具备以下条件可以给出具体的解决方案

  • 我想象 API 主机在本地计算机上
  • 我想您使用模拟器来运行该应用程序

您尝试使用邮递员的 URL 可能类似于此http://127.0.0.1:[port number]/registerhttp://localhost:[port number]/register. 但这可能不适用于模拟器,因为它无法访问该 URL。要访问本地主机,您需要找出主机地址。

请按照以下步骤获取您的主机地址。

  • 点击android模拟器中的三个点(更多)
  • 设置->代理
  • 如果您愿意,可以通过选择“手动代理配置”来更改主机地址

然后你就可以看到你host name的了port number。然后将您的 URL 替换为http://10.0.0.2:5000/register.

在此输入图像描述


Roh*_*ker 6

Harnish,需要更多一些详细信息才能调试此错误。

  1. 您是在本地运行服务器还是与远程服务器通信?
  2. 您是否在Android模拟器上运行该应用程序?

可能的解决方案:

如果您是在本地运行服务器并使用Android模拟器,则您的服务器终结点应该10.0.2.2:8000不是localhost:8000AVD 10.0.2.2用作主机回送接口(即)的别名,而不是localhost

期货注意事项

我在上面注意到,代码正在使用await,然后在同一行上。显然,这可能会令人困惑,await用于暂停执行直到将来完成,并且then是在将来完成之后执行的回调函数。可以写成如下

void myFunction() async {
    var data = {};
    var response = await http.post(URL, headers:headers, body:data);
    if (response.statusCode == 200) {
        print(reponse.body);
    } else {
       print('A network error occurred');
    }
}

Run Code Online (Sandbox Code Playgroud)

或非异步/等待方法

void myFunction() {
    var data = {};
    http.post(URL, headers:headers, body:data)
    .then((response) => print(response.body))
    .catchError((error) => print(error));
}

Run Code Online (Sandbox Code Playgroud)

有关Dart期货的更多详细信息,请阅读 https://www.dartlang.org/tutorials/language/futures


Fel*_*omé 5

在 C#[.net core api] 中,转到“属性”选项卡下的 launchSettings.json,并将以下代码更改为此(将 applicationURl 上的 localhost 更改为 0.0.0.0),并在应用程序(flutter)上使用本地 IPV4 IP。例如:(192.169.0.10)

"coreWebAPI": {
      "commandName": "Project",
      "launchBrowser": false,
      "launchUrl": "api/values",
      "applicationUrl": "http://0.0.0.0:5000", 
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
Run Code Online (Sandbox Code Playgroud)