使用MobileSubstrate修改iPhone操作系统上的所有HTTP请求?
我想写一个MobileSubstrate()插件,它接受每个HTTP请求并修改URL。(原因非常复杂,需要一段时间来解释,所以请相信我,没有其他选择)。基本上,我需要知道我应该覆盖哪个Objective-C消息或C函数来拦截任何HTTP请求、修改URL并将请求发送回原始函数(这不应该只是应用程序发送的第一个请求,也应该是任何重定向)。我想它可能在NSURL或CFNetwork中,但不确定具体在哪里。此功能被替换后,应可用于任何应用程序和操作系统本身 编辑: 好的,下面是我想做的两个示例场景,请注意,要覆盖的方法应该是由从应用程序到操作系统的任何HTTP请求调用的方法:使用MobileSubstrate修改iPhone操作系统上的所有HTTP请求?,iphone,objective-c,http,networking,jailbreak,Iphone,Objective C,Http,Networking,Jailbreak,我想写一个MobileSubstrate()插件,它接受每个HTTP请求并修改URL。(原因非常复杂,需要一段时间来解释,所以请相信我,没有其他选择)。基本上,我需要知道我应该覆盖哪个Objective-C消息或C函数来拦截任何HTTP请求、修改URL并将请求发送回原始函数(这不应该只是应用程序发送的第一个请求,也应该是任何重定向)。我想它可能在NSURL或CFNetwork中,但不确定具体在哪里。此功能被替换后,应可用于任何应用程序和操作系统本身 编辑: 好的,下面是我想做的两个示例场景,请注
1) MobileSafari中的用户在aaa.com/a.html中键入 2) aaa.com/a.html重定向到aaa.com/b.html
3) aaa.com/b.html加载bbb.com/c.png
我想更改请求,以便所有内容都已添加?I=j。
例如:将所有aaa.com/a.html更改为aaa.com/a.html?i=j,aaa.com/b.html?i=j,bbb.com/c.png?i=j?
还有一个:
1) 用户使用地图。应用程序
2) 谷歌地图试图加载Google.com/map1.png(我知道不是实际图像)
将google.com/map1.png更改为google.com/map1.png?i=j?
钩住以下方法,并用您编辑的
可变副本
交换请求
-[NSURLConnection sendWillSendRequest:redirectResponse::
-[NSURLConnection initWithRequest:委托:
–[NSURLConnection initWithRequest:delegate:startImmediately:][/code>
注意:在这样做时要非常小心。在我看来,重定向所有http请求违反了用户信任钩住以下方法,并使用您编辑的
mutableCopy
交换请求
-[NSURLConnection sendWillSendRequest:redirectResponse::
-[NSURLConnection initWithRequest:委托:
–[NSURLConnection initWithRequest:delegate:startImmediately:][/code>
注意:在这样做时要非常小心。在我看来,重定向所有http请求违反了用户信任好吧,下面是一个示例场景:1)MobileSafari中的用户在aaa.com/a.html中键入2)aaa.com/a.html重定向到aaa.com/b.html 3)aaa.com/b.html在我替换“-[NSURLConnection sendWillSendRequest:redirectResponse:”时加载bbb.com/c.png用我的代码将?i=j添加到所有html请求中,是否会将所有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.com/map1.png(我知道不是实际图像)替换该方法会将Google.com/map1.png更改为Google.com/map1.png吗?i=j?另外,我正在编写的这个移动基板插件仅供内部使用。您可以将URL更改为您想要的任何位置。如何工作取决于你。另外,您可能需要我错过的其他挂钩,但这应该可以让您开始:)但是,如果,比如,用户正在使用基于CFNetwork的ASIHTTPRequest(就像NSURLConnection和pals一样),那么这将不起作用。如果你想要一个更“完整”的钩子,你可以降低一个级别并钩住CFNetwork做同样的事情。ckrames1234:正确。或者你可以降低到这个值并钩住所有套接字:)好的,下面是一个示例场景:1)手机中的用户在aaa.com/a.html中键入2)aaa.com/a.html重定向到aaa.com/b.html 3)aaa.com/b.html在我用代码替换“-[NSURLConnection sendWillSendRequest:redirectResponse:]”时加载bbb.com/c.png,以向所有html请求添加?I=j,它是否将所有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.com/map1.png(我知道不是实际图像)替换该方法会将Google.com/map1.png改为Google.com/map1.png吗?i=j?另外,我正在编写的这个移动基板插件仅供内部使用。您可以将URL更改为您想要的任何位置。如何工作取决于你。另外,您可能需要我错过的其他挂钩,但这应该可以让您开始:)但是,如果,比如,用户正在使用基于CFNetwork的ASIHTTPRequest(就像NSURLConnection和pals一样),那么这将不起作用。如果你想要一个更“完整”的钩子,你可以降低一个级别并钩住CFNetwork做同样的事情。ckrames1234:正确。或者你可以走到比这更低的地方,钩住所有的插座:)