如何将AFNetworking请求打印为RAW数据

时间:2013-07-04 14:52:03

标签: ios afnetworking

出于调试目的,我想打印整个请求体。我正在使用AFHTTPClient。打印客户端提供一些信息,如标题,但post / get params不存在。

有办法吗?

4 个答案:

答案 0 :(得分:37)

内置AFNetworking工具

对于AFNetworking 1.x,请使用AFHTTPRequestOperationLogger

对于AFNetworking 2.x,请使用AFNetworkActivityLogger

这些工具都使用AFNetworking的NSNotification广播来将请求和响应数据记录到控制台。要显示的信息量是可配置的,可以将它们配置为忽略某些操作。

在没有这些工具的情况下在Xcode中进行检查

HTTP请求(传出数据)

如果您想检查外发请求的正文,请查看NSURLRequest的{​​{1}}参数,该参数是HTTPBody上的一个属性。

例如,在方法AFHTTPRequestOperation中,在发出请求后,您可以将其输入调试器:

-[AFHTTPClient getPath: parameters: success: failure:]

4是po [[NSString alloc] initWithData:request.HTTPBody encoding:4],如NSString.h中所定义。

NSUTF8StringEncoding的{​​{1}}参数将方法(GET,POST,PUT等)提供为NSURLRequest

HTTP响应(传入数据)

当您的服务器响应时,您的成功完成块将传递HTTPMethod对象(默认情况下称为NSString)。你可以:

  • AFHTTPRequestOperation查看状态代码
  • operation查看标题
  • p (int)[[operation response] statusCode]查看回复正文
  • po [[operation response] allHeaderFields]查看响应对象(如果无法序列​​化,则可能为po [operation responseString]

答案 1 :(得分:20)

自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'

答案 2 :(得分:17)

您应该使用AFLoggerLevelDebug查看https://github.com/AFNetworking/AFHTTPRequestOperationLogger作为调试级别。

#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

答案 3 :(得分:0)

要使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;
}