我正在用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());
});
SocketException:操作系统错误:连接被拒绝,errno = 111
我希望此请求的响应是一个包含用户和令牌的Json对象。
答案 0 :(得分:6)
除了Rohan的回答,您还可以阅读:
Unable to make calls to Localhost using Flutter, random port being assigned to HTTP GET call
我试图使用本地服务器在物理设备上运行我的应用程序,因此,我不得不使用以下提到的命令,请记住根据您自己的端口号更改端口号
adb reverse tcp:3001 tcp:3001
@maheshmnj指出此命令正在重定向您手机的 端口3001到计算机的端口3001。如果要 将手机的端口2000重定向到计算机的端口3000,然后 您可以这样做
adb reverse tcp:2000 tcp:3000
您还可以通过下面提到的页面阅读有关adb和网络的信息 https://developer.android.com/studio/command-line/adb.html
答案 1 :(得分:4)
ipconfig
并获取ipv4 1:示例:
await http.post("http://127.68.34.23/wp-json/...",
headers: headers,
body: json.encode(data))
如果在服务器中,则将main的URL写入url
答案 2 :(得分:4)
我去了终端,并使用了ifconfig
命令
我有我的IP地址:192.168.0.109
然后,在Flutter应用程序HTTP请求中,我只是用我的“ localhost”替换了该IP地址。而且它就像一种魅力!
答案 3 :(得分:3)
如果您在 url 中使用“localhost”,请将其更改为您的 ipv4 地址,它会起作用
答案 4 :(得分:1)
我在春季后端的抖动中也遇到了同样的问题。而不是使用 在我的请求中将“ http:// localhost:8080 /”更改为“ http://143.235.7.641:8080/”,其中“ 143.235.7.641”是我的Wi-Fi IPv4地址,并且可以正常工作。>
(注意:我假设您正在物理电话中测试抖动,并且电话和计算机连接到同一Wi-Fi。)
答案 5 :(得分:0)
Harnish,需要更多一些细节才能调试此错误。
可能的解决方案:
如果您在本地运行服务器并使用Android模拟器,则服务器端点应为10.0.2.2:8000
而不是localhost:8000
,因为AVD使用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');
}
}
或非异步/等待方法
void myFunction() {
var data = {};
http.post(URL, headers:headers, body:data)
.then((response) => print(response.body))
.catchError((error) => print(error));
}
有关Dart期货的更多详细信息,请阅读 https://www.dartlang.org/tutorials/language/futures
答案 6 :(得分:0)
尝试将<uses-permission android:name="android.permission.INTERNET"/>
添加到清单中。这为我解决了这个问题。
答案 7 :(得分:0)
我用$ adb tcpip <port-your-local-server>
答案 8 :(得分:0)
这是我为解决同一错误而必须更改的内容:
python manage.py runserver 0:8000
而不是python manage.py runserver
来启动django(0:8000是0.0.0.0:8000的缩写,并使您的Web应用程序在本地网络上可见-请参见https://docs.djangoproject.com/en/3.0/ref/django-admin/#runserver) ipconfig
(如果在Windows上),否则请运行ifconfig
。ALLOWED_HOSTS = ['*', ]
(但只能在您的开发环境中!)答案 9 :(得分:0)
您需要做的是获取您的公共PC IP并在您的URL中使用它,例如: http://192.168.0.67:3000,其中3000是端口号。
答案 10 :(得分:0)
我曾经有过同样的问题, 经过一些过于复杂的stackoverflow答案和Google搜索之后,我终于弄清楚了, 在这种情况下,您最有可能使用的是Android模拟器,因此只需打开模拟器上的移动数据,然后再试一次,我确定这次可以使用。
答案 11 :(得分:0)
在真实设备上运行时,我遇到了同样的问题,仅更改API链接中的IP无效。
对我来说,解决方案是使服务器运行以下命令:
manage.py runserver 0.0.0.0:8000
然后将您的计算机IP传递到API链接而不是localhost,如下所示:
http://192.168.0.67:8000
答案 12 :(得分:0)
在C#[。net核心api]中,转到“属性”选项卡下的launchSettings.json并将以下代码更改为此(将localhost在applicationURl上更改为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"
}
}
答案 13 :(得分:0)
final response = await client.post(
"http://192.xxx.xx.xx/api/signin",
headers: {"Authorization": apiKey},
body: jsonEncode({
"username": username,
"password": password,
}));
即使我遇到了 SocketException 错误,但我替换了我的 IP 地址并且没有提到任何端口号,它对我有用,如果我提到端口号,它会抛出错误。 希望这会奏效。
我使用 Flask 作为后端,使用 blocs。
答案 14 :(得分:0)
当端点不正确或您的主机和服务器后端(示例 Laravel API)不共享相同的 IP 地址时,会出现此问题。
解决方案是。
ifconfig
上输入来查找您的 IP。IP ADDRESS
的服务器,sudo php artisan serve --host YOUR_COMPUTER_IP_ADDRESS --port NUMBER
示例:
`sudo php artisan serve --host 192.168.1.11 --port 80`
http://192.168.1.11:80/Your_Route