如何重定向iPad发出的HTTP请求?

124

因为在iPad上我们不能编辑hosts文件(除非越狱),那么我们如何任意重定向网页流量到另一个URL?

这对于开发使用虚拟主机配置的网站,并且想要重定向到开发机器时非常重要。

(这与此问题有关:我可以编辑iPad的hosts文件吗?

18个回答

91

绕过iPad的限制的方法是使用HTTP代理服务器,比如在另一台机器上运行的Squid,并可以编辑主机文件。

在iPad中,通过设置 -> 网络 -> Wi-Fi -> (您的网络),有一个可以手动设置的HTTP代理设置。在此处输入代理信息即可。

设置完成后,您就可以像更改主机文件一样操作iPad了。


4
仅供参考,我会说使用MacPorts安装Squid非常简单,只需运行命令"sudo port install squid"即可。 - MiQUEL
2
在 Fedora 上执行 yum install squid - Abhishek
4
在Ubuntu上,执行apt-get install squid安装Squid。 - Jess Telford
3
注意:每次在Squid服务器上编辑hosts文件后,都要重新启动Squid服务,以确保所做的修改生效。在Ubuntu上,可以使用sudo service squid3 reload命令来重新启动服务。此外,在我的开发服务器上可能存在配置问题,需要在iPad上手动输入"http://"才能正确解析地址。 - Andy Giesler
2
另一种更简单的方法是使用我编写的工具:testProxy。无需配置:https://github.com/edwinm/testProxy - edwin
显示剩余2条评论

75

我发现您只需在iPad上修改Wifi设置,将开发机的IP地址作为HTTP代理地址,并配置开发机作为代理(如上述文章中所述):

enter image description here

这样,只需输入虚拟主机的URL(例如local.mywebapp.com),您就可以在iPad上访问您的网络应用程序了。这种方法简单快捷,但与Will Koehler的解决方案不同的是,您将无法从iPad上访问互联网。但是大多数情况下这并不是真正的问题,因为您只想测试自己的应用程序。


2
很好的答案。如果你正在使用Webrick测试Rails应用程序,只需设置开发机器的IP地址和端口3000即可。 - lsaffie
4
如果您在Windows上使用 Wamp 或 uWamp,请将端口设置为 80 - Epoc
13
像我这样的情况,在你们的本地应用程序从网络上的各种API获取数据时怎么办? - Jared Eitnier

30

感谢您详细说明了Windows/Mac选项。 - tremoloqui
2
对于我们这些Windows开发人员来说,Fiddler是一个很好的选择,因为大多数开发人员已经安装了它。 - Josh Mouch
一个很好的、免费的、跨平台的替代方法是使用mitmproxy,而代理方法是迄今为止最简单的方法,如果您仍然需要能够访问外部资源。 - Bjarke

12
如果您已经拥有一个正在进行开发的Apache服务器,您可以轻松地将其用作转发代理。这对于WordPress网站特别有用,因为它们真的很喜欢使用完整的绝对URL。
以下是Ubuntu的示例:
第一步是编辑dev服务器中的/etc/hosts文件。添加指向您的网站的服务器本地IP。 127.0.0.1 dev.mysite.com 当Apache代理尝试解析来自您的iPhone / iPad的请求时,将使用此主机文件。现在让我们设置Apache部分...
您可能需要先安装一些模块。
sudo apt-get install libapache2-mod-proxy-html
sudo a2enmod proxy proxy_http proxy_html
sudo apache2ctl graceful

接下来创建一个虚拟主机文件,例如/etc/apache2/sites-available/my-proxy

Listen *:8080
<VirtualHost *:8080>
    ProxyRequests On

    <Proxy *>
        Order Deny,Allow
        Deny from all
        Allow from 192.168.1.0/24 
    </Proxy>
</VirtualHost>

启用虚拟主机,并重启Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

接下来进入设置 > Wi-Fi > 您的网络,并配置"手动"代理。输入您Apache服务器的IP和端口即可完成!

<Proxy *>块确保只有在我的本地网络上的人才能使用该代理。如果您使用转发代理,则严格限制访问是必不可少的。此时ip2cidr页面将非常有用。(作为额外措施,我的防火墙会阻止:8080端口的访问。)


9
也可以使用Weblock - AdBlock for iOS应用程序(在此处可用,售价1.99美元:https://itunes.apple.com/us/app/weblock/id558818638?mt=8)创建网页流量重定向。
这使您可以将符合某些规则的任何流量重定向到指定的IP地址。这将模拟在iOS设备上添加/ etc/hosts条目。如果请求中设置的主机名由您指定的流量处理IP处理,则可以使用此功能测试私有API甚至嗅探从其他应用程序或网站发送的流量。不幸的是,这仅适用于http / https连接。
所有这些都只能在Wi-Fi上完成(Weblock的限制之一)。其主要优点是您可以轻松地从iOS设备配置所有内容,而无需烦恼DNS /代理服务器配置。
以下是示例:
1.我已像这样配置Weblock:http://i.stack.imgur.com/c5SUh.png 2.打开Safari并键入www.google.com作为URL 3.这是我在监听端口1234上连接时终端的输出:
macbook-pro-tk:〜kpr $ nc-l-v-v 1234 GET http://www.google.com/ HTTP/1.1 Host: www.google.com Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Proxy-Connection: keep-alive PREF=ID=7722bc3c844a7c26:TM=1402073839:LM=1402073839:S=5bSJJsM2p0HgUP7L User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53 Accept-Language: en-us Accept-Encoding: gzip, deflate Connection: keep-alive Weblock还可以使用正则表达式有选择地重定向某些URL。 您可以仅重定向到某个端点的查询,而所有其他查询都会转到DNS返回的IP。这实际上允许比/ etc/hosts更适合的配置。
例如: 如果我为htt *://somedomain.com/api/login *和一些IP和端口创建了URL重定向规则,则只会在此IP和端口上看到来自此URL的流量,而所有其他流量都将直接转到DNS返回的IP。请注意,由于规则结尾处的通配符*,它将适用于/ api / login/ api / login?someparam = somevalue

谢谢。我刚刚购买了这个,准备试一试。 - Dennis Day

9

我需要在iPad上测试正在开发的Web应用程序。我在我的开发机上使用Apache运行Web应用程序,因此我找到的最简单的解决方案是使用Apache mod_proxy。

我的开发机在家庭网络中可见,名称为sapphire.local。

我正在测试的Web应用程序托管在开发机上的demo.cms.dev上(我正在使用POW)。

为设置代理,我将以下部分添加到httpd.conf中。

<VirtualHost *:80>
  ServerName sapphire.local
  ProxyPass / http://demo.cms.dev/
  ProxyPassReverse / http://demo.cms.dev/
  ProxyPassReverseCookieDomain .cms.dev .sapphire.local
  ProxyPreserveHost Off
</VirtualHost>

此方法将sapphire.local上的传入请求路由到demo.cms.dev。该方法一次只适用于一个应用程序。我认为您可以使用不同的端口来设置其他应用程序。也许有人有更好的解决方案?


这指引我朝着正确的方向前进。起初,我收到了一个错误信息:“没有有效的URL协议处理程序”。我发现我必须同时加载proxy_module和proxy_http_module才能使它正常工作。谢谢! - Hobo

6
我使用Mac上的 Squidman 制作了它。它易于设置和使用。
我按照这篇文章的指示,在5分钟内完成了设置。

更新

另外一件事是,如果您想连接到运行在代理服务器上的网站(在我的情况下是我的Mac),您需要在Squidman->首选项->模板中注释掉此行。

# protect web apps running on the proxy host from external users
# http_access deny to_localhost

5

如果您的网络中没有内部DNS服务器,请设置一个,并设置A记录。然后确保DHCP设置为返回所述DNS服务器。


4

您也可以使用http://xip.io/,按照该页面上的说明输入IP地址,它将重定向您到相应的本地IP。


2
如果您有一个正在运行的网站可以用于此目的:
您可以在DNS配置中添加A记录:something.yourdomain.com,该记录指向您的本地IP地址,然后将something.yourdomain.com的条目添加到您的虚拟主机文件中。重新启动Apache,将您的iOS设备连接到同一网络即可。

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