在 iOS 中监听 HTTP 请求

Listening to HTTP requests in iOS

有没有办法在iPhone中拦截HTTP请求?例如我可以在 NSNotificationCenter 中注册一些东西,这样每次发出 HTTP 请求或收到 HTTP 响应时,我的应用程序都会收到通知?

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

谢谢

根据你的问题,不清楚你想做什么,但我建议要么实施 NSURLProtocol class,要么使用 PonyDebugger.

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

创建自定义 URL 协议后,在 appDelegate class 中注册它,这样您的协议将优先于任何内置协议。

 [NSURLProtocol registerClass:[MyURLProtocol class]];

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

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

AFNetworkingTaskDidResumeNotification  
AFNetworkingTaskDidCompleteNotification

不,你不能用你的应用程序拦截 HTTP 请求 - 你当然可以充当你自己应用程序请求的代理,但你不能代理其他应用程序的请求

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

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

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

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

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