出于调试目的,我想打印整个请求正文。我正在使用 AFHTTPClient。打印客户端提供一些信息,例如标题,但不存在发布/获取参数。
有没有办法做到这一点?
对于 AFNetworking 1.x,使用AFHTTPRequestOperationLogger
.
对于 AFNetworking 2.x,使用AFNetworkActivityLogger
.
这些工具都使用NSNotification
AFNetworking 的广播将请求和响应数据记录到控制台。要显示的信息量是可配置的,它们可以配置为忽略某些操作。
如果要检查传出请求的正文,请查看NSURLRequest
'sHTTPBody
参数,它是AFHTTPRequestOperation
.
例如,在方法-[AFHTTPClient getPath:
parameters:
success:
failure:]
中,发出请求后,您可以在调试器中键入:
po [[NSString alloc] initWithData:request.HTTPBody encoding:4]
4 是NSUTF8StringEncoding
NSString.h 中定义的。
的参数提供方法NSURLRequest
(HTTPMethod
GET、POST、PUT 等)作为NSString
.
当您的服务器响应时,您的成功完成块将传递一个AFHTTPRequestOperation
对象(operation
默认调用)。你可以:
p (int)[[operation response] statusCode]
查看状态码po [[operation response] allHeaderFields]
查看标题po [operation responseString]
查看响应正文po [operation responseObject]
查看响应对象(nil
如果无法序列化,则可能是这样)从 AFNetworking 2.0 开始,您应该使用AFNetworkActivityLogger
#import "AFNetworkActivityLogger.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef DEBUG
[[AFNetworkActivityLogger sharedLogger] startLogging];
[[AFNetworkActivityLogger sharedLogger] setLevel:AFLoggerLevelDebug];
#endif
return YES;
}
如果您正在使用3.0
和使用CocoaPods,您还需要AFNetworkActivityLogger
从相应的分支中提取:
pod 'AFNetworkActivityLogger', git: 'https://github.com/AFNetworking/AFNetworkActivityLogger.git', branch: '3_0_0'
您应该查看https://github.com/AFNetworking/AFHTTPRequestOperationLogger和 AFLoggerLevelDebug 作为调试级别。
#import "AFHTTPRequestOperationLogger.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef DEBUG
[[AFHTTPRequestOperationLogger sharedLogger] startLogging];
[[AFHTTPRequestOperationLogger sharedLogger] setLevel:AFLoggerLevelDebug];
#endif
return YES;
}
@end
要使 AFNetworking 3.0 能够设置日志记录级别,您需要以下内容:
#import <AFNetworkActivityLogger/AFNetworkActivityLogger.h>
#import <AFNetworkActivityLogger/AFNetworkActivityConsoleLogger.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
AFNetworkActivityConsoleLogger *logger = [AFNetworkActivityLogger sharedLogger].loggers.anyObject;
logger.level = AFLoggerLevelDebug;
[[AFNetworkActivityLogger sharedLogger] startLogging];
return YES;
}