基于 Apple的 CustomHTTPProtocol,JLHPLoggingHTTPProtocol
将所有可见于 NSURLProtocol
系统的请求和响应记录到控制台。这应仅用于调试。它不会显示所有 HTTP 交互,因为身份验证交互对 NSURLProtocol
系统不可见。例如,NTLM
在 NSURLProtocol
系统看到的请求被接受之前,会使用多个 HTTP 请求和响应进行身份验证。此外,某些 iOS 框架的 HTTP 调用根本不可见于 NSURLProtocol
系统全部(例如 AV Foundation streaming)。
尽早在应用程序的生命周期中调用 +[JLHPLoggingHTTPProtocol start]
,因为 NSURLProtocol
注册调用顺序是反向注册顺序(首先注册的 NSURLProtocol
是最后调用的一个)。如果其他 NSURLProtocol
修改了请求,则这些修改应该在调用 JLHPLoggingHTTPProtocol
之前发生。
在 early 调用 +[JLHPLoggingHTTPProtocol start]
是一个好地方是 main.m
。由于这应仅用于调试,所以 +[JLHPLoggingHTTPProtocol start]
应该以某种方式进行保护,以确保仅在调试模式下调用。以下示例中,Xcode 方案插入的参数将填充 NSUserDefaults
以触发调用。
//
// main.m
// JiveLoggingHTTPProtocolDemo
//
// Created by Heath Borders on 3/2/15.
// Copyright (c) 2015 Jive Software. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <JiveLoggingHTTPProtocol/JLHPLoggingHTTPProtocol.h>
int main(int argc, char * argv[]) {
@autoreleasepool {
// NSUserDefaults grab any program arguments with the format `-name value`.
// In the JiveLoggingHTTPProtocolDemo scheme, we have `-logHTTP YES` defined.
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"logHTTP"]) {
[JLHPLoggingHTTPProtocol start];
}
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
根据 LICENSE 文件采用 BSD 许可证。