26

出于调试目的,我想打印整个请求正文。我正在使用 AFHTTPClient。打印客户端提供一些信息,例如标题,但不存在发布/获取参数。

有没有办法做到这一点?

4

4 回答 4

38

内置 AFNetworking 工具

对于 AFNetworking 1.x,使用AFHTTPRequestOperationLogger.

对于 AFNetworking 2.x,使用AFNetworkActivityLogger.

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

没有这些工具的 Xcode 考试

HTTP 请求(传出数据)

如果要检查传出请求的正文,请查看NSURLRequest'sHTTPBody参数,它是AFHTTPRequestOperation.

例如,在方法-[AFHTTPClient getPath: parameters: success: failure:]中,发出请求后,您可以在调试器中键入:

po [[NSString alloc] initWithData:request.HTTPBody encoding:4]

4 是NSUTF8StringEncodingNSString.h 中定义的。

的参数提供方法NSURLRequestHTTPMethodGET、POST、PUT 等)作为NSString.

HTTP 响应(传入数据)

当您的服务器响应时,您的成功完成块将传递一个AFHTTPRequestOperation对象(operation默认调用)。你可以:

  • p (int)[[operation response] statusCode]查看状态码
  • po [[operation response] allHeaderFields]查看标题
  • po [operation responseString]查看响应正文
  • po [operation responseObject]查看响应对象(nil如果无法序列​​化,则可能是这样)
于 2013-07-05T20:14:37.947 回答
21

从 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'
于 2014-07-24T08:41:25.967 回答
17

您应该查看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
于 2013-07-05T22:32:28.820 回答
1

要使 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;
}
于 2018-02-15T01:23:04.957 回答