首页 > 解决方案 > 无法从 http 访问 127.0.0.1。我必须使用 android 设备不支持的 localhost

问题描述

我不确定这是否是一个错误。如果这是我已经使用 github 的错误: https ://github.com/microsoftgraph/microsoft-graph-docs/issues/3106

如果不是我需要帮助。我在 Unity3d 中为我的游戏使用 microsoft-graph 将保存文件存储在一个驱动器用户帐户上。我可以在哪里使用 localhost 一切正常,但在 android 设备上我必须使用 127.0.0.1 作为 localhost。对于 dropbox 和 google,我能够做到...但是 microsoft-graph 不适用于 ip localhost 上的 http,例如 127.0.0.1 它仅适用于 localhost 的 http,并且它需要 https 用于 127.0.0.1...当然是 HttpListener在 c# 中 for loopback 仅适用于 http (因为这是一个游戏,我需要用户在没有奇怪配置的情况下在 android 上使用它)。我认为这是一个错误,因为 boot Dropbox 和 google 让您能够将 http 用于 127.0.0.1 ......但如果它' s 不是 bug 你将如何解决这个问题?甚至可以在没有任何奇怪配置的情况下通过 HttpListener 或类似的方式在环回中使用 https?您应该知道,如果我在登录后手动将重定向 url 更改为 http,我就能使其工作。唯一的问题是我不想设置服务器来多次重定向用户。我希望我的游戏在 localhost 中查找重定向 url 响应(在 android 上应该是 127.0.0.1)。

我需要知道是否可以将 https 与 HttpListener(或类似的东西)一起用于 127.0.0.1,或者您知道如何在没有任何 web 应用程序的情况下解决此问题。

var httpListener = new HttpListener();
httpListener.Prefixes.Add("http://127.0.0.1:" + anyfreeportonyourpc + "/");
httpListener.Start();

标签: c#unity3dmicrosoft-graph-api

解决方案


我不确定这是您所说的错误还是功能,但我有一些想法可以尝试。

可能最简单的解决方法是使用http://readme.localtest.me/ - 这样您就可以使用http://localtest.me:80指向 127.0.0.1 的公共 DNS 记录 - 它非常适合测试目的,但在这种情况下相当聪明的工作。

但是正如您所提到的,它需要加密,因此根据上述想法,您可以在您自己的域之一上执行此操作。像免费的Lets Encrypt一样为其获取证书,然后将其指向 127.0.0.1 并在您的设备上使用它。

假设您有一个名为a.plgo 的域并创建一个子域local.a.pl并将该子域上的 A 记录设置为127.0.0.1(这通常是带有 Web 应用程序的服务器,但在这种情况下我们想用它来解决问题)使用让我们加密把证书放在那里,这样你就可以使用 HTTPS 或者自签名也可以,我不知道。

然后在您的代码中执行此操作

httpListener.Prefixes.Add("https://local.a.pl:" + anyfreeportonyourpc + "/");

是的,您的应用程序最初需要互联网连接才能找到 DNS 记录,并将其缓存在移动设备上。将 TTL 设置为最大值将有助于在没有互联网时保持缓存。因此,一旦它被解决,您就可以将该域用于与您需要的本地设备的每个连接。它只需要 2 秒的互联网来缓存 DNS 条目。

以某种方式添加主机查找的另一种方法......不知道如何,但一个简单的本地 A 记录到 myapp.local该点回到主机文件中的 127。这只是出于解决方法的目的而进行的私人级别查找,但由于过去的过度滥用,该记录在手机上可能并不直接。

听起来图形服务器绑定仅设置为localhost...的主机名,请检查您是否可以更改它或将其放宽为 IP 地址。这将解决您问题的根本原因。我知道这些东西有时有愚蠢的绑定。


推荐阅读