我正在运行 localhost:54722 的本地计算机上运行Web服务 .
localhost:54722
我想从Android模拟器中运行的应用程序调用该服务 .
我读到在应用程序中使用 10.0.2.2 将访问localhost,但它似乎也不适用于端口号 . 它说 HttpResponseException: Bad Request .
10.0.2.2
HttpResponseException: Bad Request
您可以使用IP地址“ 10.0.2.2 ”访问主机 .
这是由Android团队以这种方式设计的 . 因此,您的网络服务器可以在localhost上完美运行,您可以通过“ http://10.0.2.2:<hostport> ”从Android应用程序访问它 .
http://10.0.2.2:<hostport>
使用10.0.2.2作为默认AVD,使用10.0.3.2作为Genymotion
如果您使用的是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 for Visual Studio 2015),找到您网站的绑定元素,然后添加< binding protocol =“http”bindingInformation =“:8080:”/>
确保将其添加为第二个绑定而不是修改现有绑定,否则VS将重新添加一个附加了_2617012的新站点 . 此外,您可能需要以管理员身份运行VS.
我在Visual Studio Professional 2015中安装了“Conveyor by Keyoti”解决了这个问题 . 传送带生成一个REMOTE地址(您的IP),其端口(45455)启用了外部请求 . 例:
Conveyor允许您从网络上的外部平板电脑和手机或Android模拟器测试Web应用程序(无需 http://10.0.2.2:<hostport> )
步骤如下:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
我在Visual Studio上执行IIS Express上的Web应用程序时面临同样的问题 . 要解决此问题,您需要转到项目属性,然后单击Debug选项卡并将[http://localhost:YOUR PORT]更改为[http://127.0.0.1:YOUR PORT]并将android url设置为[http://10.0.2.2:YOUR PORT] . 它对我有用 .
我有一个在我的localhost上运行的网络服务器 .
如果我打开模拟器并想连接到我的localhost,我正在使用 192.168.x.x . 这意味着您应该使用本地lan IP地址 . 顺便说一句,你的 HttpResponseException (Bad Request) 并不意味着主机无法访问 .
192.168.x.x
HttpResponseException (Bad Request)
其他一些错误会导致此异常 .
问题是Android模拟器将 10.0.2.2 映射到 127.0.0.1 , not 到 localhost . 因此,请将您的Web服务器配置为serveron 127.0.0.1:54722 而不是 localhost:54722 . 应该这样做 .
127.0.0.1
localhost
127.0.0.1:54722
你需要将URL设置为 10.0.2.2:portNr
10.0.2.2:portNr
portNr = ASP.NET Development Server给定的端口我的当前服务正在 localhost:3229/Service.svc 上运行
portNr =
localhost:3229/Service.svc
所以我的网址是 10.0.2.2:3229
10.0.2.2:3229
我这样解决了我的问题
我希望它有帮助......
"BadRequest"是一个错误,通常由服务器本身发送,请参阅rfc 2616
10.4.1 400错误请求由于语法格式错误,服务器无法理解请求 . 客户端不应该在没有修改的情况下重复请求 .
因此,您与服务器 Build 了有效连接,但您的请求不符合excet表单 . 我不知道你是如何创建连接的,包括哪些 Headers (如果有的话) - 但那就是你要检查的内容 .
如果您需要更多帮助,请说明您的代码是什么以及它用于连接服务器的用途,因此我们可以了解情况 .
Here是一个具有相同问题的问题 - 答案是内容类型未在 Headers 中设置 .
我想向您展示我从Android模拟器访问IISExpress Web API的方式 . 我正在使用Visual Studio 2015.我从Android Studio调用Android模拟器 .
我需要做的就是将以下行添加到 applicationhost.config 文件中的绑定配置中
<binding protocol="http" bindingInformation="*:<your-port>:" />
然后我检查并使用IP4地址从Android模拟器访问我的API
要求:必须以管理员身份运行Visual Studio . This post给出了完美的方法 .
有关更多详细信息,请访问github上的my post
希望这可以帮助 .
对于Laravel Homestead用户:如果有人使用Laravel和宅基地,你可以在模拟器中使用192.168.10.10访问app后端
还是行不通?另一个好的解决方案是使用ngrok https://ngrok.com/
运行本地主机后,您会收到 http://localhost:[port number]/ ,您找到了您的端口号 .
http://localhost:[port number]/
然后从Command获取您的IP地址,打开您的Windows命令并输入 ipconfig
ipconfig
就我而言,IP是 192.168.10.33 所以我的URL将是[http://192.168.10.33:port数字] / . 在Android中,工作室使用此URL作为您的URL . 之后,在模拟器的手动代理中设置您的URL和端口号 .
192.168.10.33
localhost似乎在我的模拟器中工作正常,然后我开始得到连接拒绝异常我从模拟器浏览器使用127.0.2.2它工作,当我在我的Android应用程序中使用它在模拟器中它再次开始显示连接被拒绝的问题 .
然后我做了ifconfig,我使用了ip 192.168.2.2,它运行得很好
错误请求通常意味着您发送的数据格式不正确 . 可能是数据映射不匹配 . 如果您收到错误请求意味着您可以连接到服务器,但请求未正确发送 .
如果有人还在寻找这个,这就是它对我有用的方式 .
您需要找到与您连接的设备/仿真器相关的机器IP . 对于仿真器来说,通过以下步骤;
转到VM虚拟框 - >在列表中选择已连接的设备 .
选择设置 - >网络 - >找出设备所连接的网络 . 对我来说这是'VirtualBox Host-Only Ethernet Adapter #2' .
在virtualbox中,转到文件 - >首选项 - >网络 - >仅主机网络,找出上述步骤中指定的网络的IPv4 . (通过悬停你会得到信息)
提供此IP以从模拟器访问localhost . 端口与运行/发布服务时提供的端口相同 .
Note #1 : 确保您已经处理好防火墙和入站规则 .
Note #2 : 重新启动机器后,请检查此IP . 出于某种原因,即使我提供"Use the following IP"主机专用IP也发生了变化 .
当服务层使用Visual Studio IIS Express时,我解决了问题 . 只是指向10.0.2.2:port不会工作 . 我没有像其他帖子所提到的那样弄乱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.x.x:8090
如果您正在使用某些第三方软件包(如node express或angular-cli),则需要找到计算机的IP,并将主机连接到服务器启动配置(而不是localhost)中的IP . 然后使用IP从模拟器启动它 . 例如,我不得不使用: ng serve -H 10.149.212.104 来使用angular-cli . 然后从我使用的模拟器: http://10.149.212.104:4200
ng serve -H 10.149.212.104
http://10.149.212.104:4200
1)在cmd中运行ipconfig命令
2)你会得到这样的结果
3)然后使用VMWare网络适配器1的IPv4地址,然后使用端口号
在我的情况下它的8080,所以而不是使用localhost:8080
我使用的是192.168.56.1:8080
做.....
在网址中提供具有互联网的系统的IP地址 . 例如:190.168.1.90它对我有用
19 回答
您可以使用IP地址“
10.0.2.2
”访问主机 .这是由Android团队以这种方式设计的 . 因此,您的网络服务器可以在localhost上完美运行,您可以通过“
http://10.0.2.2:<hostport>
”从Android应用程序访问它 .使用10.0.2.2作为默认AVD,使用10.0.3.2作为Genymotion
如果您使用的是IIS Express,则可能需要绑定到所有主机名而不仅仅是“localhost” . 检查这个好答案:
https://stackoverflow.com/a/15809698/383761
确保将其添加为第二个绑定而不是修改现有绑定,否则VS将重新添加一个附加了_2617012的新站点 . 此外,您可能需要以管理员身份运行VS.
我在Visual Studio Professional 2015中安装了“Conveyor by Keyoti”解决了这个问题 . 传送带生成一个REMOTE地址(您的IP),其端口(45455)启用了外部请求 . 例:
Conveyor允许您从网络上的外部平板电脑和手机或Android模拟器测试Web应用程序(无需
http://10.0.2.2:<hostport>
)步骤如下:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
我在Visual Studio上执行IIS Express上的Web应用程序时面临同样的问题 . 要解决此问题,您需要转到项目属性,然后单击Debug选项卡并将[http://localhost:YOUR PORT]更改为[http://127.0.0.1:YOUR PORT]并将android url设置为[http://10.0.2.2:YOUR PORT] . 它对我有用 .
我有一个在我的localhost上运行的网络服务器 .
如果我打开模拟器并想连接到我的localhost,我正在使用
192.168.x.x
. 这意味着您应该使用本地lan IP地址 . 顺便说一句,你的HttpResponseException (Bad Request)
并不意味着主机无法访问 .其他一些错误会导致此异常 .
问题是Android模拟器将
10.0.2.2
映射到127.0.0.1
, not 到localhost
. 因此,请将您的Web服务器配置为serveron127.0.0.1:54722
而不是localhost:54722
. 应该这样做 .你需要将URL设置为
10.0.2.2:portNr
portNr =
ASP.NET Development Server给定的端口我的当前服务正在localhost:3229/Service.svc
上运行所以我的网址是
10.0.2.2:3229
我这样解决了我的问题
我希望它有帮助......
"BadRequest"是一个错误,通常由服务器本身发送,请参阅rfc 2616
因此,您与服务器 Build 了有效连接,但您的请求不符合excet表单 . 我不知道你是如何创建连接的,包括哪些 Headers (如果有的话) - 但那就是你要检查的内容 .
如果您需要更多帮助,请说明您的代码是什么以及它用于连接服务器的用途,因此我们可以了解情况 .
Here是一个具有相同问题的问题 - 答案是内容类型未在 Headers 中设置 .
我想向您展示我从Android模拟器访问IISExpress Web API的方式 . 我正在使用Visual Studio 2015.我从Android Studio调用Android模拟器 .
我需要做的就是将以下行添加到 applicationhost.config 文件中的绑定配置中
然后我检查并使用IP4地址从Android模拟器访问我的API
要求:必须以管理员身份运行Visual Studio . This post给出了完美的方法 .
有关更多详细信息,请访问github上的my post
希望这可以帮助 .
对于Laravel Homestead用户:如果有人使用Laravel和宅基地,你可以在模拟器中使用192.168.10.10访问app后端
还是行不通?另一个好的解决方案是使用ngrok https://ngrok.com/
运行本地主机后,您会收到
http://localhost:[port number]/
,您找到了您的端口号 .然后从Command获取您的IP地址,打开您的Windows命令并输入
ipconfig
就我而言,IP是
192.168.10.33
所以我的URL将是[http://192.168.10.33:port数字] / . 在Android中,工作室使用此URL作为您的URL . 之后,在模拟器的手动代理中设置您的URL和端口号 .localhost似乎在我的模拟器中工作正常,然后我开始得到连接拒绝异常我从模拟器浏览器使用127.0.2.2它工作,当我在我的Android应用程序中使用它在模拟器中它再次开始显示连接被拒绝的问题 .
然后我做了ifconfig,我使用了ip 192.168.2.2,它运行得很好
错误请求通常意味着您发送的数据格式不正确 . 可能是数据映射不匹配 . 如果您收到错误请求意味着您可以连接到服务器,但请求未正确发送 .
如果有人还在寻找这个,这就是它对我有用的方式 .
您需要找到与您连接的设备/仿真器相关的机器IP . 对于仿真器来说,通过以下步骤;
转到VM虚拟框 - >在列表中选择已连接的设备 .
选择设置 - >网络 - >找出设备所连接的网络 . 对我来说这是'VirtualBox Host-Only Ethernet Adapter #2' .
在virtualbox中,转到文件 - >首选项 - >网络 - >仅主机网络,找出上述步骤中指定的网络的IPv4 . (通过悬停你会得到信息)
提供此IP以从模拟器访问localhost . 端口与运行/发布服务时提供的端口相同 .
Note #1 : 确保您已经处理好防火墙和入站规则 .
Note #2 : 重新启动机器后,请检查此IP . 出于某种原因,即使我提供"Use the following IP"主机专用IP也发生了变化 .
当服务层使用Visual Studio IIS Express时,我解决了问题 . 只是指向10.0.2.2:port不会工作 . 我没有像其他帖子所提到的那样弄乱IIS Express,而是在IIS Express前放置代理 . 例如,apache或nginx . nginx.conf看起来像
然后android需要指向我的IP地址为192.168.x.x:8090
如果您正在使用某些第三方软件包(如node express或angular-cli),则需要找到计算机的IP,并将主机连接到服务器启动配置(而不是localhost)中的IP . 然后使用IP从模拟器启动它 . 例如,我不得不使用:
ng serve -H 10.149.212.104
来使用angular-cli . 然后从我使用的模拟器:http://10.149.212.104:4200
1)在cmd中运行ipconfig命令
2)你会得到这样的结果
3)然后使用VMWare网络适配器1的IPv4地址,然后使用端口号
在我的情况下它的8080,所以而不是使用localhost:8080
我使用的是192.168.56.1:8080
做.....
在网址中提供具有互联网的系统的IP地址 . 例如:190.168.1.90它对我有用