我如何redirect从iPad制作的HTTP请求?

由于在iPad上我们不能编辑主机文件(没有越狱),我们如何可以任意redirectnetworkingstream量到另一个url?

这对于开发一个使用虚拟主机configuration的网站来说是非常重要的,在这个网站上你要redirect到一台开发机器。

(这与这个问题有关: 我可以编辑iPad的主机文件吗? )

解决iPad限制的方法是使用HTTP代理服务器,例如在另一台机器上运行的Squid ,您可以在其中编辑主机文件。

在设置 – >networking – > Wi-Fi – >(您的networking)下的iPad上有一个可以设置为手动的HTTP代理设置。 在这里input你的代理信息。

一旦设置完成,就可以像操作主机文件一样操作iPad。

我发现你只需修改 iPad 的Wifi设置 ,将开发机器的IP地址作为HTTP代理(如前文所述 ):

在这里输入图像说明

这样,通过input虚拟主机的URL(例如local.mywebapp.com )就可以访问您的iPad上的Web应用程序。 这很容易和快捷,但不像威尔·克勒的解决scheme,你将无法从iPad访问互联网。 但是大多数情况下,这不是一个真正的问题,因为你只是想testing自己的应用程序。

在运行代理服务器(如Fiddler或Charles)的计算机上安装hosts文件,并将iPadconfiguration为使用该计算机作为HTTP代理。

以下是如何使用Fiddler完成此操作的说明: http : //conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

这是查尔斯: http : //www.ravelrumba.com/blog/ipad-http-debugging/

我需要testing我在iPad上开发的Web应用程序。 我在我的开发机器上使用Apache来运行Web应用程序,所以我find的最简单的解决scheme是使用Apache mod_proxy。

我的开发机器可以在我的家庭networking上看到,如sapphire.local。

我正在testing的Web应用程序在demo.cms.dev(我正在使用POW)的开发机器上托pipe。

为了设置代理,我在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。 该方法一次只适用于一个应用程序。 我想你可以使用不同的端口来设置额外的应用程序。 也许有人有更好的解决scheme?

如果您已经在开发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 

然后创build一个虚拟主机文件,例如/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>您的networking,并configuration一个“手动”代理。 input您的Apache服务器的IP地址和端口。 而已!

<Proxy *>块确保只有本地networking上的人可以使用此代理。 如果您正在使用转发代理,则严格限制访问权限至关重要 。 ip2cidr页面在这一点上是有帮助的。 (作为一个额外的措施,8080端口被我的防火墙阻止。)

也可以使用Weblock – AdBlock for iOS应用程序(可在此处获得1.99美元: https ://itunes.apple.com/us/app/weblock/id558818638?mt = 8 )来创buildWebstream量redirect。

这允许您将任何符合特定规则的stream量redirect到指定的IP地址。 这将模拟在你的iOS设备上添加一个条目到/ etc / hosts。 如果请求中设置的主机名由IP处理,您可以使用它来testing私有API,甚至可以嗅探其他应用或网站发送的stream量。 这不幸的只适用于http / https连接。

所有这些只能在Wi-Fi(networking锁的一个限制)时才能完成。 主要的优点是你可以很容易地configuration你的iOS设备上的所有东西,并且不需要混淆DNS /代理服务器configuration。

这是一个例子:

  1. 我已经像这样configuration了Weblock: http : //i.stack.imgur.com/c5SUh.png
  2. 打开Safari并在www.google.com中inputurl
  3. 这是我的Mac上terminal上的输出监听端口1234上的连接:

     macbook-pro-tk:〜kpr $ nc -l -v -v 1234
     GET http://www.google.com/ HTTP / 1.1
    主持人:www.google.com
    接受:text / html,application / xhtml + xml,application / xml; q = 0.9,* / *; q = 0.8
    代理连接:保持活动
     PREF = ID = 7722bc3c844a7c26:TM = 1402073839:LM = 1402073839:S = 5bSJJsM2p0HgUP7L
    用户代理:Mozilla / 5.0(iPhone;像Mac OS X的CPU iPhone OS 7_1_1)AppleWebKit / 537.51.2(KHTML,如Gecko)版本/ 7.0 Mobile / 11D201 Safari / 9537.53
     Accept-Language:en-us
     Accept-Encoding:gzip,deflate
    连接:保持活力

networkinglocking也有利于有select地redirect一些URL的正则expression式。 您只能将查询redirect到某个端点,而所有其他查询则转到从DNS返回的IP。 这实际上允许/ etc / hosts做更合适的configuration。

例如:如果我为htt *://somedomain.com/api/login*和一些IP和端口创build了一个URLredirect规则, 那么在这个IP和端口上将只能看到来自这个URL的stream量,而其他所有stream量则会看到某个域。 com将直接转到由DNS返回的IP。 注意,它将适用于/ api / login/ api / login?someparam = somevalue感谢规则末尾的通配符*符号。

您可以在您的networking上设置一个内部DNS服务器(如果其中一个不存在)并设置一个Alogging。 然后确保您的DHCP设置为返回所述DNS服务器

我在Mac上使用了squidman 。 这很容易设置和使用。
按照这篇文章,我在5分钟内设置它。

更新

另一件事是,如果你想连接到代理服务器上运行的网站,在我的情况下,这是我的Mac,你需要在squidman-> Preferences-> Template

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

如果你有一个现场的网站,你可以使用这个:

您可以将Alogging添加到您的DNSconfiguration:something.yourdomain.com指向您的本地IP地址,然后将something.yourdomain.com条目添加到您的虚拟主机文件。 重新启动Apache,让你的iOS设备在同一个networking,你很好去。

这是一个没有configuration方法跨设备/计算机testing的Mamp专业虚拟主机。 唯一的限制是你一次只能testing一个域,但是对于我来说,这在我正在开发的时候是很好的。 然而,直接在mamp中的虚拟主机之间进行切换非常简单。

我正在运行mamp pro 2,山狮。 我的网站文件夹包含单个域文件夹。

我发现如果你select虚拟主机'ip / port'下的本地计算机的特定IP地址并重新启动mamp,那么当通过networking查看本地计算机的IP地址或计算机名称时,该域将成为默认域。

出于testing目的,这在networking上的所有设备(包括iPad)上运行良好。 如果你想testing另一个虚拟主机,你可以简单地将IP /端口configuration返回到“*”,然后重新分配另一个域到计算机的IP地址,然后重新启动。

这种简单的方法的优点是,当您在同一networking上时,您可以直接访问您的开发站点,而无需通过他们的机器上的任何configuration。

希望这可以帮助其他人寻找简单的解决scheme。

内部的DNS服务器是其中一个选项,但是实现太麻烦了。 我们尝试安装鱿鱼作为代理服务器,但也没有工作,因为它redirect到新的服务器的URL,这个redirect也在浏览器的URL上看到。

最后为我们工作的事情是在其中一台服务器上安装Fiddler,并使用此服务器作为ipad上的代理服务器。 提琴手也有一个function,将子域映射到IP地址,即类似于/ etc / hosts。

尼斯教程这样做: http : //egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

另一种方法是通过本地热点连接IPad与我的MAC OS X,并build立到开发虚拟机的端口转发。 要做到这一点,我做了以下几个步骤:

  • 在MAC OS X上创build一个WLAN-Hotspot Link如何做到这一点
  • 将iPAD连接到热点WLAN(在iPAD >>设置>>无线局域网上)
  • 将ServerAlias添加到本地开发VM(详情如下)
  • build立ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • int iPADs浏览器打开与IP的页面
    <IP-of-hotspot-host>:<source-port>

哪里可以买到“IP热点主机”:

创build热点后,有一个WLAN点
MAC OS X系统设置>>networking>> WLAN

添加ServerAlias:

在我的开发-VM(Apache2)在/etc/apache2/sites-available/dkr.dev.local我不得不添加以下内容:

  <VirtualHost *:80>  
     ...  
     ServerAlias <IP热点主机>  
     ...  
 </虚拟主机> 

我会尝试中继服务器(Afaria的一部分),它可以重新定位基于configuration文件的移动stream量。

更新:tremoloqui的答案似乎更less的麻烦,更便宜。

如果你一直在探索这个,以及一些外部链接,你可能会find这个答案:

https://stackoverflow.com/a/24770097/3842985

它是关于一个称为dnsmasq的轻量级DNS服务器。 超级简单,function非常强大,可以与您的内部或外部DNS服务器结合使用。

比安装squid,摆弄Apache以及其他耗时的技术,以及configuration,开发环境,testing环境等的“完整性”都要容易得多。

很值得考虑。

我将其作为发展和正常networking的常规工具。

这里的答案是正确的。 多一点的知识:这些将无法使用证书固定。 你可以做的是(1)使用域通配符证书来支持你的开发/testing/ qa区域testing。 和/或(2)使用一个反向代理服务器,比如Apache,这样你就可以更改到Apache在你的networking中路由请求的地方。 现在,当你进入SSL Pinningtesting时,你已经死在物理设备的水中,只能通过模拟器(ios)和仿真器(android)进行validation。