在iOS中侦听HTTP请求

时间:2015-01-31 12:13:08

标签: ios objective-c xcode http

有没有办法拦截iPhone中的HTTP请求?例如我可以注册NSNotificationCenter中的某些内容,这样每次HTTP请求结束或HTTP响应进入时我的应用都会收到通知吗?

我搜索了很多但没有运气,

谢谢

3 个答案:

答案 0 :(得分:2)

从你的问题不清楚你想做什么,但我会建议实现NSURLProtocol类或使用PonyDebugger。

<强> NSURLProtocol
创建一个NSURLProtocol类的子类,它将处理所有Web协议,如HTTP,HTTPS,SSL等。这是一个抽象类,它提供了执行特定于协议的URL数据加载的基本结构。

创建自定义URL协议后,请在appDelegate类中注册,以使您的协议优先于任何内置协议。

 [NSURLProtocol registerClass:[MyURLProtocol class]];

<强> PonyDebugger
如果您只是想拦截所有的http请求,我会试试这个工具。 PonyDebugger是一个远程调试工具集。它是一个客户端库和网关服务器组合,使用浏览器上的Chrome开发者工具来调试应用程序的网络流量和托管对象上下文。

AFNetworking:
如果您使用非常流行的AFNetworking为您的网络请求,他们会自动发送通知。尝试注册以下两个:

AFNetworkingTaskDidResumeNotification  
AFNetworkingTaskDidCompleteNotification

答案 1 :(得分:2)

你不能用你的应用程序拦截HTTP请求 - 你当然可以作为你的OWN应用程序请求的代理,但是你无法代理其他应用程序的请求

答案 2 :(得分:0)

您是否只想查看从您控制的单个设备(例如用于调试目的)的所有HTTP / HTTPS流量?如果是这样,只需设置代理并使用它来监控请求。

如果您正在谈论将其构建到一个应用程序以进行一般发布,我非常希望这不可能,如果是的话,我怀疑它不会#39; t通过应用商店批准。

如果您只想要一个调试代理:

对于Windows,请下载Fiddler(免费),然后使用您的并按照此处的说明操作(在手机上安装证书并使用运行Fiddler的计算机的IP地址作为代理地址): http://docs.telerik.com/fiddler/configure-fiddler/tasks/ConfigureForiOS

对于Mac OSX,Charles也会做这项工作(我已经将它用于此目的并且效果很好): http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/