如何使用Flutter调用API?

ee7vknir  于 2023-10-22  发布在  Flutter
关注(0)|答案(3)|浏览(132)

我正在Flutter中创建一个移动的应用程序,并在物理设备(Android)上进行测试。我在本地的wamp服务器上运行我的API。当我把路由设置为失眠时,它会工作并返回一个JSON。然而,当我尝试从这个路由在我的Flutter应用程序。这给了我一个错误:


final httpResponse = await http.get(Uri.parse('$_baseUrl/motorlocations'));

我试过:
http://127.0.0.1:80/..
http://localhost:80/...
http://10.0.2.2:80/..
http://myIPV4:80/...
=>如果你看图片,端口是42794,而我输入端口80。
我试过这个命令:adb -d reverse tcp:42794 tcp:80 (80)但它不工作。

ndh0cuux

ndh0cuux1#

如果使用print _baseUrl,会看到什么?

dbf7pr2w

dbf7pr2w2#

您遇到的问题与您的Android设备尝试连接到本地服务器的方式有关。当您使用http://localhost、http://127.0.0.1http://10.0.2.2时,Android模拟器将这些解释为对模拟器自己的Android网络接口的引用,而不是对主机的本地服务器的引用。这就是为什么您会看到不同的端口号。
要解决此问题,您可以使用主机的IP地址。请按照以下步骤操作:
1.查找您的主机的本地IP地址。您可以在命令提示符下使用命令ipconfig(在Windows上)或ifconfig(在macOS或Linux上)来查找它。查找IPv4地址(例如192.168.1.x)。
1.在Flutter应用程序的代码中使用此IP地址:
1.将Internet权限添加到manifest.xml
final String baseUrl = 'http://your_host_machine_ip:80';
final httpResponse = await http.get(Uri.parse('$baseUrl/yourAPI'));

fcg9iug3

fcg9iug33#

**谢谢大家的意见!我找到解决办法了

在我的防火墙Windows中,我创建了一个规则,以打开端口80。然后,在文件httpd-vhosts.conf中,我将“Requirelocal”更改为“Requireallgranted”。此外,我在代码中使用了ipv4地址。

相关问题