本地主机在Mac上运行。我能在我的Android手机上查看它吗?

75
在我的Mac上运行Ruby on Rails项目,我需要在我的Android手机上测试它。是否有一种方法可以在我的Android手机上查看我的Mac本地主机?

我尝试了这个页面上的所有解决方案,但它们都没有起作用。但是,对于某人声称的重复问题,这个答案有一个不同且正确的答案,对我很有效。https://dev59.com/g2w15IYBdhLWcg3wMpAY#9515414 - SWoo
要在 Android 手机上运行本地主机,请尝试使用以下方法 - https://dev59.com/arnoa4cB1Zd3GeqPTJXS#60500370 - kumudgupta76
13个回答

94

"localhost"这个名称只是指向你自己的计算机回环地址。要在Android上访问它,你需要找到计算机的IP地址。

最常见的找到这些信息的方法,在Mac和Linux系统上都适用,就是进入终端并输入ifconfig命令。查找"en0"或"en1",然后在该条目下查找"inet"列表。它将类似于"192.168.1.100"。当你找到这个地址时,就可以在浏览器的地址栏里输入它了。

(在Mac电脑上,你也可以前往"系统偏好设置"中的"共享"选项卡,那里会告诉你该地址。)


13
补充一下我发现的内容。在Android浏览器中输入192.168.1.107(我的Mac IP)是行不通的,但如果我输入192.168.1.107:3000,就可以正常工作。 - VHanded
6
那是因为你的 Rails 服务器正在监听 3000 端口。 - Mark
8
确保您输入的是 ifconfig 而不是我最近从PC切换到Mac时错误输入的 ipconfig。花费了相当长的时间才发现这个打字错误。 - SMBiggs
3
请确保Mac和Android设备在同一网络上。 - Amar Ilindra
2
在共享面板中,我应该启用什么? - cegprakash
不错的文章,对我很有帮助。https://prowe214.medium.com/tip-how-to-view-localhost-web-apps-on-your-phone-ad6b2c883a7c - Aleksandr Golovatyi

20

以下是让您的本地主机可用于其他设备测试的快速待办事项:

1)确定您的Android IP地址:选择您连接的Wi-Fi(与Mac连接的相同),您将在其上详细说明IP地址。例如:我们假设您的Android IP地址为192.168.0.10。

2)在Mac上打开Shell并编辑您的主机:

sudo nano /etc/hosts

3) 编辑文件如下:

127.0.0.1 192.168.0.10

4) 确定您的 Mac IP 地址:(正如 @Chuck 完美解释的那样) (在您的 shell 中):

ifconfig

5) 打开你手机上使用的最喜欢的网页浏览器,并直接连接到你的Mac IP地址(如有需要,请带上端口号),例如:

http://192.168.x.x:8000/

6) 祝您测试愉快 :)

请注意,您可以对连接到您的Wi-Fi上的每个支持设备都执行此操作。


13
有人在点赞之前真正尝试过这个吗? - dansalmo
1
是的,它正在工作。为了获取Android IP,我使用了这个应用程序:此应用程序 - Maxim Yefremov
5
快速获取 Mac IP 地址:在终端中输入 ifconfig | grep 192 - Maxim Yefremov
设备在不同的网络上怎么办? - albanx
这对我有用,使用了@MaximYefremov的两个提示。注意:ifconfig | grep 192将返回两个IP地址:inetbroadcast。使用inet旁边的那个。 - Chris Perry
显示剩余5条评论

15

假设您的移动设备和计算机在同一网络上,Chunk的回答是正确的。然而,如果您想让localhost服务器对更广泛的互联网可见(例如,在3G上进行测试、开发Webhooks或与远程同事/客户合作),则需要更多的操作,因为本地地址(以10.* 或 192.168.*开头)对更广泛的互联网不可见。

传统的解决方案是端口转发和动态DNS,但最近出现了几个旨在简化该过程的服务(免责声明:我是其中一个PageKite的作者)。

这些服务为您提供公共DNS名称和软件,将您的“localhost”连接到云中继服务器(也称为反向代理)。例如,如果您使用PageKite,则可以在终端中运行以下命令:

$ pagekite.py 80 yourname.pagekite.me

...从http://yourname.pagekite.me/创建到运行在http://localhost:80上的Web服务器的映射。当程序正在运行时,您的localhost站点将对互联网的其他部分可见。为了使它再次私有,您只需关闭pagekite.py连接器程序。

为了完整起见,以下是我所知道的一些本地主机隧道服务:

  • PageKite是一款自由软件(Python),拥有“按您所愿”在线服务。您可以创建任意数量的长期子域,包括通配符SSL证书,并且前端中继在多个地理位置运行,以提供冗余和响应能力。
  • Localtunnel是一个免费(由Twilio赞助)的Ruby解决方案,提供连接的临时名称。请注意,名称将被回收,因此在连接处于活动状态时,可能会看到意外的流量。
  • Showoff.io和Tunnlr.com是专有付费服务,类似于Localtunnel,基于相同的基本技术(ssh隧道)。

(很抱歉没有链接到最后两个,因为SO的垃圾邮件保护措施防止我对我的竞争对手公平。;-)


自从您发布文章以来,另一个类似的付费选择是Forward(www.forwardhq.com)。 - Taylor D. Edmiston

14

这对我来说是在本地网络上访问Rails服务器的有效方法:

  • 防火墙必须关闭。
  • /etc/hosts应该有以下条目:

    127.0.0.1 192.168.100.12
    

    192.168.100.12是通过在终端中运行ifconfig命令找到的IP地址。

  • 使用以下命令启动rails服务器:

    rails server -b 0.0.0.0 -p 8080
    
    我能够通过http://192.168.100.12:8080/访问我的本地主机。


1
我也在运行一个Ruby服务器,而-b 0.0.0.0解决了我的问题!我为此苦恼了很久。谢谢! - Tristan Ratchford
我按照步骤操作,但出现了“您没有权限查看此页面”403错误。 - Ahmed El Kilani

13
今天我发现了一个很棒的免费工具 - 安装非常简单,而且使用起来非常顺畅!同时也提供了Mac OS、Linux和Windows版本。

https://ngrok.com/

(我与此无任何关联)


即使您无法关闭防火墙,它也可以正常工作。 - Timuçin

13

此外,如果您想要在Android/iOS设备上测试使用Angular开发的PWA应用程序,则需要使用:

ng serve --host 0.0.0.0 命令启动服务器CLI。

如果您收到“Invalid Host Header”错误,请使用:

ng serve --host 0.0.0.0 --disableHostCheck true


3

阅读完这个帖子后(并尝试过建议),我整理了一份解决此问题的单一指南。 这是链接,包含每个步骤的截图和查找位置 或者下面是文本。感谢您的帮助!

首先,您的手机和笔记本电脑必须连接到同一个WiFi网络。如果您使用手机的热点,它仍将起作用。但是,在继续之前,请确保将两台设备连接到同一网络。

接下来,收集您的手机IP地址。为此,我使用Network Info II应用程序。肯定有其他方法可以完成此操作。但是,为了本教程而言,Network Info II可行且符合要求。

现在在您的计算机上打开终端(不用担心您所在的目录),运行命令sudo nano /etc/hosts/。输入系统密码后,您会在终端顶部看到一个数字串,后面跟着localhost一词。实际上,localhost只是计算机自己的服务器地址的别名,因此当您在浏览器中访问localhost时,它只是将http请求路由到本地机器。为了将您的手机连接到此循环中,请在数字串和localhost之间输入其IP地址。
要保存此内容,请按control + X,然后在提示保存时按Y。之后,回车键将带您返回标准命令行。
在终端中打开第二个选项卡并启动本地服务器。我只测试过使用简单的python服务器,可以通过在终端中运行python -m SimpleHTTPServer 8000来运行。但是,我假设您可以启动任何您喜欢的本地服务器,因为您需要引用的仅是端口号。如果您使用简单的python服务器,则该端口号为8000。
在终端中运行ifconfig命令。这将带来大量信息,您应该向下滚动到大约一半的位置。您要查找的是在en0:或en1:键内inet和netmask之间跟随的一串数字。
完成!在Android上,打开浏览器并访问inet号码,后面加上冒号(:)和端口号。

3
为什么Chrome认为你的链接是攻击网站?再加上你的声誉,这样就非常可疑了。 - SMBiggs

3

MacOS Catalina 10.15.4

  1. 前往 设置 -> 安全性与隐私

enter image description here

  1. 选择 防火墙 选项卡,并使用你的电脑密码解锁设置:

enter image description here

  1. 选择 防火墙选项... 并在对话框中取消选中阻止所有传入连接的复选框,然后点击“好”。

enter image description here

  1. 打开终端并输入ifconfig。查找 en0,在该部分查找靠近inet的地址,这是你电脑在本地网络中的地址。
en0: flags0=<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 0
...
        inet 192.168.0.123 netmask 0xffffff00 broadcast 192.168.0.255
...


使用IP地址和端口号(如果您在开发过程中使用localhost:4200,则需要加上端口号),否则可以省略端口号:
http://<IP address found in en0 -> inet>:<port if needed>
  1. 利润!

2

虽然已有一个答案被接受,但这个方法对我很有效:

  1. 确保电脑和安卓设备在同一网络下。
  2. 获取你的电脑IP地址。(例如Mac,可以在终端输入ifconfig并查找 en0/en1 -> inet ,它应该类似于19*.16*.1.4)。
  3. 打开手机设置,进入网络-> 长按你的WiFi网络->修改网络->向下滚动到高级选项->选择手动代理,在代理主机名中键入你的地址,即19*.16*.1.4,在端口内输入你的端口号,保存。

  4. 在Google Chrome中搜索“我的IP是什么”,并获取你的IP地址,假设它是1**.1**.15*.2**

  5. 尝试从你的移动设备访问1**.1**.15*.2**:port/

就是这么简单。


1

对于MacOS,打开系统偏好设置 > 网络。

您应该会看到消息“并且具有IP地址:我的IP地址”

那就是您的IP地址,在浏览器中导航到http://my-ip-address/port-number。请记住不要在http中添加“s”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接