我在运行的本地计算机上运行Web服务localhost:54722
。
我想从在Android模拟器中运行的应用中调用服务。
我读到,10.0.2.2
在应用程序中使用可以访问localhost,但它似乎也不适用于端口号。它说HttpResponseException: Bad Request
。
我在运行的本地计算机上运行Web服务localhost:54722
。
我想从在Android模拟器中运行的应用中调用服务。
我读到,10.0.2.2
在应用程序中使用可以访问localhost,但它似乎也不适用于端口号。它说HttpResponseException: Bad Request
。
Answers:
您可以使用IP地址“ 10.0.2.2
” 访问主机。
这是由Android团队以这种方式设计的。因此,您的网络服务器可以完美地在localhost上运行,您可以通过Android应用程序通过“ http://10.0.2.2:<hostport>
” 访问它。
如果仿真器必须通过代理服务器访问Internet,则可以从仿真器的“扩展控件”屏幕配置自定义HTTP代理。打开模拟器后,单击“ 更多” ,然后单击“设置和代理”。在这里,您可以定义自己的HTTP代理设置。
对于默认的AVD使用10.0.2.2,对于Genymotion使用10.0.3.2
在IIS Express上执行Web应用程序的Visual Studio上,我遇到了相同的问题。要修复它,您需要转到项目属性,然后单击“调试”选项卡,然后将http:// localhost:[您的端口]更改为http://127.0.0.1 :[您的端口] 并将android url设置为http:/ /10.0.2.2:[您的端口]。它为我工作。
http://localhost:5000/
Postman和iOS模拟器来访问它。此解决方案适用于Android模拟器,无需修改服务器,也无需修改模拟器中的任何设置。快速,美观,可移植到其他计算机,无需额外工作。
如果您使用的是IIS Express,则可能需要绑定到所有主机名,而不仅仅是“ localhost”。检查这个好的答案:
https://stackoverflow.com/a/15809698/383761
告诉IIS Express自身绑定到所有IP地址和主机名。在您的.config文件中(通常为%userprofile%\ My Documents \ IISExpress \ config \ applicationhost.config或$(solutionDir).vs \ config \ applicationhost.config用于Visual Studio 2015),找到站点的绑定元素,然后添加
<binding protocol="http" bindingInformation="*:8080:*" />
确保将其添加为第二个绑定,而不是修改现有的绑定,否则VS只会重新添加一个附加了的新站点。(1)
此外,您可能需要以管理员身份运行VS。
我通过在Visual Studio Professional 2015中安装“通过Keyoti传送器”解决了该问题。传送器通过启用外部请求的端口(45455)生成了一个远程地址(您的IP)。例:
通过Conveyor,您可以从网络上的外部平板电脑和手机或Android模拟器(不带http://10.0.2.2:<hostport>
)测试Web应用程序
这些步骤在以下链接中:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
由于10.0.2.2
这不是Android的安全域,因此您必须在网络配置中允许API 28+的非安全域,默认情况下会禁止非TLS连接。
您可以使用以下配置:
在main / res / xml / network_security_config.xml中创建一个新文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
并将其指向AndroidManifest.xml
<application
......
......
android:networkSecurityConfig="@xml/network_security_config">
运行本地主机后,您会到达http://localhost:[port number]/
此处,找到了端口号。
然后从Command获取IP地址,打开Windows命令并输入 ipconfig
在我的情况下,使用IP,192.168.10.33
因此我的URL将为http://192.168.10.33:[端口号] /。在Android中,工作室使用此URL作为您的URL。然后,在模拟器的手动代理中设置URL和端口号。
“ BadRequest”是通常由服务器本身发送的错误,请参见rfc 2616
10.4.1 400错误的请求
由于语法格式错误,服务器无法理解该请求。客户不应在没有修改的情况下重复请求。
这样您就可以与服务器建立有效的连接,但是您的请求不适合expecet表单。我不知道如何创建连接,不包括哪些头(如果有的话)–但这就是您应检查的内容。
如果您需要更多帮助,请说明您的代码含义以及与服务器连接所使用的代码,因此,我们有一个全面的了解。
这是一个与问题相同的问题–答案是未在标头中设置内容类型。
我想向您展示我从Android模拟器访问IISExpress Web API的方式。我使用的是Visual Studio2015。我从Android Studio调用Android模拟器。
我需要做的就是将以下行添加到applicationhost.config文件中的绑定配置中
<binding protocol="http" bindingInformation="*:<your-port>:" />
然后我检查并使用IP4地址从Android模拟器访问我的API
要求:您必须以管理员身份运行Visual Studio。这篇文章提供了一个完美的方法来做到这一点。
希望这可以帮助。
对于Laravel Homestead用户:如果有人将Laravel与Homestead一起使用,则可以在模拟器中使用192.168.10.10访问应用程序后端
还是行不通?另一个好的解决方案是使用ngrok https://ngrok.com/
我正在使用Windows 10作为开发平台,无法在仿真器中访问10.0.2.2:port,并且此问题中的其他解决方案也无法达到预期的效果。
经过几个小时的挖掘,我发现如果在模拟器启动命令中添加-writable-system参数,则一切正常。
您必须通过如下所示的命令行启动仿真器:
emulator.exe -avd <emulator_name> -writable-system
然后在模拟器中,您可以使用LAN IP地址和绑定端口访问在主机上运行的API服务:
http://192.168.1.2:<port>
希望这可以帮助你。
关于从命令行启动模拟器:https : //developer.android.com/studio/run/emulator-commandline。
在Android Emulator上访问localhost
从AndroidManifest.xml添加互联网权限
<uses-permission android:name="android.permission.INTERNET" />
在此处添加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地址,然后尝试在网络浏览器中打开,例如http://192.168.0.102:8080/
不要忘记在IP地址之后添加PORT,在我的情况下,应用程序在8080端口上运行,因此我添加了在(A)中使用8080端口获得的IP
如果仍然有人在寻找这个,这就是它为我工作的方式。
您需要找到您所连接设备/仿真器的机器IP。对于仿真器,请按照以下步骤操作;
提供此IP以从仿真器访问localhost。该端口与运行/发布服务时提供的端口相同。
注意#1:请确保已处理好防火墙和入站规则。
注意#2:重新启动计算机后,请检查此IP。由于某些原因,即使我提供了“使用以下IP”,“仅主机” IP也已更改。
当服务层使用Visual Studio IIS Express时,我解决了确切的问题。只需指向10.0.2.2:端口将无法工作。我没有像其他帖子所提到的那样乱搞IIS Express,而是在IIS Express前面放置了一个代理。例如,apache或nginx。nginx.conf看起来像
# Mobile API
server {
listen 8090;
server_name default_server;
location / {
proxy_pass http://localhost:54722;
}
}
然后,Android需要指向我的IP地址为192.168.xx:8090
1)在cmd中运行ipconfig命令
3)然后使用VMWare网络适配器1的IPv4地址和端口号
在我的情况下为8080,因此不要使用localhost:8080
我正在使用192.168.56.1:8080
完成.....
当我尝试从Android模拟器连接到IIS .NET Web服务时,我遇到了同样的问题。
npm install -g iisexpress-proxy
iisexpress-proxy 53990 to 9000
将IIS Express端口代理到9000并从模拟器访问端口9000 "http://10.0.2.2:9000"
原因似乎是默认情况下,IIS Express不允许来自网络的连接 https://forums.asp.net/t/2125232.aspx?Bad+Request+Invalid+Hostname+when+accessing+localhost+Web+API来自或跨+ LAN +或+ Web + App +