如何从Android平板电脑访问我的127.0.0.1:8000?

35

我正在使用Django在我的Windows 7电脑上开发网页,现在我需要在平板电脑上测试一些页面。突然想到一个问题,我能否从Android平板电脑访问我的Windows本地主机?这是可能的吗?我在家中两个设备都连接同一个Wi-Fi。

我有一台安装了Android 4.0.4的三星Tab 2 10.1。


2
你无法从不同的计算机访问127.0.0.1。你需要确保你的网站正在你的局域网上监听你的网络地址,而不仅仅是localhost。 - Joe
@Joe,所以我需要用0000而不是8000来启动我的本地主机? - doniyor
0.0.0.0(将在所有接口上监听)。无需更改端口。但是您的服务器必须已经为您执行此操作。您是否尝试通过无线接口的IP地址(和端口8000)访问? - Anirudh Ramanathan
另外,检查防火墙。 - Najam
12个回答

36

看起来有几个问题。大多数回答都在解决的问题是“如何连接本地网络中的另一台服务器?”(或变体)。有两个答案,你可以直接使用计算机的 IP,也可以使用计算机的名称(可能需要附加.local)。例如,我的电脑是xavier.local

第二个问题是你似乎正在解决的问题是,runserver不能通过网络上的其他计算机访问(这是你的实际问题)。原因是默认情况下 Django 的 runserver 只会响应调用它的机器的请求。这意味着默认设置会使你只能从 Windows 访问服务器(出于安全原因他们有意这样做)。为了让它监听其他请求,你有两个选项:

runserver 192.168.1.101:8000 
# Only handle requests which are made to the IP address 192.168.1.101

或者(当处理多个环境时)更容易的方法是:

runserver 0.0.0.0:8000 # handle all requests

因此,如果您的IP地址是192.168.1.101:

runserver # only requests made on the machine will be handled
runserver 127.0.0.1 # only requests made on the machine will be handled
runserver 192.168.1.101 # handles all requests (unless IP changes)
runserver 192.168.1.100 # does not handle any requests (wrong IP)
runserver 0.0.0.0 # handles all requests (even if the IP changes)

我认为需要指出的是,在涉及本地开发机器时,0.0.0.0实际上不是一个安全问题。只有在使用可从外部访问的机器处理大型应用程序时,它才成为一个重要问题。除非您有端口转发(我有),或者像那样不稳定的事情,否则您不应过多担心。


3
在使用了runserver 0.0.0.0:8000命令后,我仍然无法从Android手机访问服务器。但是,直接从开发机器(托管服务器的那台机器)访问192.168.1.101:8000是可以的。我的操作系统是Max OSX El Captain。 - Anupam
1
只有在将我的PC的IP地址添加到Django的settings.py中允许的主机列表中后,runserver 0.0.0.0:8000才对我有效。 - arudzinska
@Anupam,你找到解决问题的办法了吗?我也遇到了同样的问题。 - Eswar
@Eswar 如果我没记错的话,它确实可以工作,但是不稳定。我想我使用了 runserver 0:8000 并修改了 settings.py 中的 ALLOWED_HOSTS 才使其正常工作。 - Anupam

26

虽然这个帖子很久以前就活跃过了,但是在Windows 10上对我起作用的方法如下。详细说明一下,可能对像我这样的新手有所帮助。

  1. 在Django的 settings.py 文件中添加 ALLOWED_HOSTS = ['*']

  2. 使用 python manage.py 0.0.0.0:YOUR_PORT 命令运行Django服务器。我将端口设置为 9595

  3. 打开防火墙以允许该端口的访问:

    • 进入控制面板 -> 系统和安全 -> Windows Defender防火墙

    • 打开高级设置,选择入站规则,然后右键单击它,选择新建规则

    • 选择 端口,点击下一步,输入你使用的端口号(在我的情况下是 9595),点击下一步,选择允许连接

    • 再次点击下一步,然后起一个名字,最后点击下一步。

  4. 现在找到你的PC的IP地址。

    • 以管理员身份打开命令提示符并运行ipconfig命令。
    • 你可能会发现多个IP地址。由于我是通过wifi连接的,我选择了 无线局域网适配器WiFi 下面的那个。在我的情况下是 192.168.0.100
    • 请注意,当你重新连接到网络时,这个IP地址可能会改变。所以你需要再次检查一下。
  5. 现在,在另一个设备(如PC、移动设备、平板电脑等)上,使用相同的网络连接到 ip_address:YOUR_PORT (在我的情况下就是 192.168.0.100:9595

    希望你一切就绪!


令人难以置信的答案! - Boris Dedejski
谢谢你的回答。它对我几乎有用,我可以看到我的手机试图加载它,但不幸的是它卡住了,无法加载。我完全按照你的步骤操作,不知道为什么它不起作用。 - amy
@amy,你找到解决方案了吗? - cikatomo
@cikatomo 这已经快两年前的事了。我记得最终我确实成功让它工作了,但是我不记得是这个具体的解决方案还是稍作修改 - 很抱歉我不能给你一个明确的答案。 - amy
@amy 谢谢,我无法使其正常工作,但我找到了一个简单的mitmproxy工具,它像反向代理一样运行。 - cikatomo
我只是想更正第二点,添加runserver成为python manage.py runserver 0.0.0.0:YOUR_PORT - undefined

16

您可以使用Windows命令提示符中的ipconfig命令查找PC的IP地址。由于您提到它们通过WiFi连接,因此请查找无线适配器的IP地址。

由于平板电脑也在同一WiFi网络中,您只需将该地址输入平板电脑的浏览器中,并在末尾添加:8000,它应该会打开该页面。


1
你确定你的Web服务器正常运行吗?如果在PC浏览器中输入127.0.0.1:8000,它会显示出来吗? - bojangler
17
我解决了使用特定IP启动服务器的问题。命令是:/manage.py runserver 193.140.209.49:8000 - doniyor
1
你尝试从另一台电脑上查看页面了吗?不是平板电脑的那种?如果它可以在另一台电脑上正常工作,但在平板电脑上无法工作,那么这有助于确定问题所在。如果它在另一台电脑上也无法工作,可能是你的Windows PC上的防火墙设置问题。 - bojangler
未来参考时可能值得一提的是,端口转发也是尝试的选项之一,在执行此操作时,应禁用托管服务器的PC上的防火墙。这样,手机就可以实际连接,否则它将显示无限加载页面,然后由于连接超时而失败。 - Emilian Cebuc

6

127.0.0.1 是一个回传地址,大致意思是“这个设备”;你的计算机和安卓平板是不同的设备,因此它们各自都有自己的 127.0.0.1。换句话说,如果你试图在安卓平板上访问 127.0.0.1,它会尝试连接到安卓设备上的 web 服务器,这不是你想要的。

然而,你应该能够通过 wifi 连接。在你的 Windows 电脑上,打开命令提示符并执行 ipconfig 命令。在输出中应该有你的 Windows 设备的地址,可能是 192.168.1.100 或类似的地址。你的平板应该能够在该地址上看到 Django 服务器。


2

需要知道您的机器的IP地址。确保您的两台机器(平板电脑和计算机)连接到同一个网络。

192.168.0.22 - 这是您的机器地址。

操作如下:

从您的平板电脑输入:192.168.0.22:8000

就这样!


此解决方案不起作用。浏览器会冻结。您需要指定一个IP地址。 - titusfx

1
如果两者连接到同一网络,则您只需要在Android应用程序中提供服务器的IP地址(在您的网络中)即可。

你是说,127.0.0.1:8000 吗? - doniyor
不可以从其他设备访问127.0.0.1。这是您在网络上的机器的IP地址。您可以使用ipconfig或ifconfig获取它。 - smk
这个解决方案对我来说不起作用。不过,如果我特别指定do manage.py runserver <mymachine ip>:myport,它就可以工作。 - titusfx

0

使用EasyPHP DevServer 14.1进行测试。 诀窍在于,您必须先将本地IP地址添加到Apache服务器中,以便监听它。

右键单击托盘图标,在“配置”->“Apache”中打开“httpd.config”文件。

# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 127.0.0.1:80
Listen 192.168.0.201:80  <<-- ADD THIS LINE

然后进入控制面板,停用您的Windows防火墙或将您的智能手机/平板电脑IP地址添加到例外中。

就是这样。希望能帮到您。

IP地址192.168.0.201可能与您的不同。 192.168.0.X


0

我自己也曾经遇到过这个问题,但是我一直无法找出原因。由于在我的iPhone上可以完美运行,所以我决定研究这个问题并找到一个快速的解决方案。

我的本地机器是Mac OSX 10.10+,一种解决方法是启动Apache服务器,但这非常不方便 - 每次想要快速检查Android设备上的内容时都需要更改DocumentRoot。此外,在Mac OSX 10.10上更改DocumentRoot非常麻烦。

如果您想使用:

python -m SimpleHTTPServer

在您的Android上,执行以下操作:
sudo python -m SimpleHTTPServer [ANY PORT YOU WANT, BUT NOT 8000]

0

尝试这个命令 python manage.py runserver 然后将平板电脑和系统连接到同一个wifi,并在地址栏中输入以下内容: 例如:python manage.py runserver 192.168.0.100:8000 在平板电脑上输入该网址


0
在我的情况下,我需要在更改防火墙设置后断开并重新连接到同一网络(手机和电脑都要),才能正常使用。

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