我想编写一个MobileSubstrate(http://www.iphonedevwiki.net/index.php/MobileSubstrate)插件,它接收每个HTTP请求并修改URL。 (原因很复杂,需要一段时间来解释,所以请相信我没有其他选择)。基本上,我需要知道什么是最好的Objective-C消息或C函数,我应该覆盖它来拦截任何HTTP请求,修改URL,并将请求发送回原始函数(这不应该只是发送的第一个请求通过应用程序,但任何重定向)。我认为它可能在NSURL或CFNetwork中,但我不确定究竟在哪里。更换时,此功能应与任何应用程序和操作系统本身一起使用。
编辑:
好的,这是我想要做的两个示例场景,请注意,覆盖的方法应该是从应用程序到操作系统的任何HTTP请求调用的方法:
1)aaa.com/a.html中的MobileSafari用户类型
2)aaa.com/a.html重定向到aaa.com/b.html
3)aaa.com/b.html加载bbb.com/c.png
我想改变请求所以一切都有?i = j添加。
EX:将所有aaa.com/a.html更改为aaa.com/a.html?i=j,aaa.com/b.html?i=j,bbb.com/c.png?i=j?
还有一个:
1)用户使用Maps.app
2)Google地图尝试加载google.com/map1.png(不是实际图片,我知道)
将google.com/map1.png更改为google.com/map1.png?i=j?
答案 0 :(得分:1)
挂钩以下方法,并使用您编辑过的mutableCopy
替换请求。
-[NSURLConnection sendWillSendRequest:redirectResponse:]
-[NSURLConnection initWithRequest:delegate:]
–[NSURLConnection initWithRequest:delegate:startImmediately:]
这不会重定向原始TCP套接字连接,只会重定向通过标准API汇总的HTTP请求。
注意:非常警惕这样做。在我看来,重定向所有http请求违反了用户信任