我在本地机器上运行一个web服务,该服务运行在localhost:54722上。

我想从Android模拟器中运行的应用程序调用该服务。

我读到在应用程序中使用10.0.2.2将访问localhost,但它似乎不能与端口号一起工作。它说HttpResponseException: Bad Request。


当前回答

我在Visual Studio上执行IIS Express上的web应用程序时也遇到了同样的问题。要修复它,你需要去你的项目属性,然后点击调试选项卡,将http://localhost:[your PORT]更改为http://127.0.0.1:[your PORT],并将android url设置为http://10.0.2.2:[your PORT]。这对我很管用。

其他回答

当我试图从Android模拟器连接到我的IIS . net Webservice时,我也遇到了同样的问题。

安装NPM Install -g iisexpress-proxy iisexpress-proxy 53990到9000到代理IIS快速端口到9000,并从模拟器如“http://10.0.2.2:9000”访问端口9000

原因似乎是默认情况下,IIS Express不允许从网络连接 https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API+or+Web+App+from+across+LAN

默认AVD使用10.0.2.2,Genymotion使用10.0.3.2

坏请求通常意味着您发送的数据格式不正确。可能是数据映射不匹配。如果您正在收到坏请求,则意味着您能够连接到服务器,但请求没有正确发送。

在Android模拟器上访问本地主机

从AndroidManifest.xml中添加internet权限 < uses-permission android: name = " android.permission。互联网" / > 添加android:usesCleartextTraffic="true",更多细节在这里: 运行如下命令找到您的系统IP地址:

ifconfig | grep "inet " | grep -v 127.0.0.1

复制从这一步(A)获得的IP地址

运行您的后端应用程序,您可以在localhost或127.0.0.1从您的系统访问它。 现在在android studio,你可以替换URL,如果你在代码中使用,或者你可以使用从步骤(A)获得的ip地址,并尝试在web浏览器中打开, 像这样http://192.168.0.102:8080/

不要忘记在IP地址后添加PORT,在我的例子中,应用程序运行在8080端口上,所以我添加了在(A)中获得的IP,端口为8080

解释为什么localhost不能从模拟器提供给任何有基本访问问题的人。对于复杂的案例,请阅读其他答案。

问题:模拟器有自己的本地网络和本地主机映射到模拟器,但不是你的主机!

解决方案:

将服务器绑定为0.0.0.0以使其可用于模拟器的网络 获取笔记本电脑的外部IP地址:ifconfig命令 在Android(或Flutter应用程序)中,使用您的外部接口IP地址,如:192.168.1.10而不是localhost