Подтвердить что ты не робот

Как распечатать запрос AFNetworking как данные RAW

Для целей отладки я хочу напечатать весь объект запроса. Я использую AFHTTPClient. клиент печати дает некоторую информацию, например, заголовки, но параметры post/get отсутствуют.

Есть ли способ сделать это?

4b9b3361

Ответ 1

Встроенные инструменты AFNetworking

Для AFNetworking 1.x используйте AFHTTPRequestOperationLogger.

Для AFNetworking 2.x используйте AFNetworkActivityLogger.

Эти инструменты используют широковещательную рассылку NSNotification по сети AFNetworking для записи данных запроса и ответа на консоль. Объем отображаемой информации настраивается, и их можно настроить для игнорирования определенных операций.

Экзамен в Xcode без этих инструментов

Запросы HTTP (исходящие данные)

Если вы хотите изучить тело исходящего запроса, посмотрите на параметр NSURLRequest HTTPBody, который является свойством на AFHTTPRequestOperation.

Например, в методе -[AFHTTPClient getPath: parameters: success: failure:] после выполнения запроса вы можете ввести его в отладчик:

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

4 является NSUTF8StringEncoding, как определено в NSString.h.

Параметр NSURLRequest HTTPMethod предоставляет метод (GET, POST, PUT и т.д.) как NSString.

HTTP-ответы (входящие данные)

Когда ваш сервер отвечает, блок завершения успеха передает объект AFHTTPRequestOperation (по умолчанию operation). Вы можете:

  • p (int)[[operation response] statusCode], чтобы увидеть код состояния
  • po [[operation response] allHeaderFields], чтобы увидеть заголовки
  • po [operation responseString], чтобы увидеть тело ответа
  • po [operation responseObject], чтобы увидеть объект ответа (который может быть nil, если он не может быть сериализован)

Ответ 2

Как и в 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'

Ответ 3

Вы должны посмотреть 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