Cómo imprimir una request de AFNetworking como datos RAW

Para propósitos de debugging, quiero imprimir el cuerpo de la request completa. Estoy usando AFHTTPClient. El cliente de printing proporciona información, como los encabezados, pero los parameters de publicación / obtención no están allí.

¿Hay una manera de hacerlo?

Herramientas integradas de AFNetworking

Para AFNetworking 1.x, use AFHTTPRequestOperationLogger .

Para AFNetworking 2.x, use AFNetworkActivityLogger .

Estas herramientas utilizan la transmisión NSNotification por AFNetworking para registrar los datos de request y respuesta en la console. La cantidad de información que se muestra es configurable, y pueden configurarse para ignorar ciertas operaciones.

Examen en Xcode sin estas herramientas

Solicitudes HTTP (datos salientes)

Si desea examinar el cuerpo de una request de salida, consulte el parámetro HTTPBody , que es una propiedad de su AFHTTPRequestOperation .

Por ejemplo, en el método -[AFHTTPClient getPath: parameters: success: failure:] , una vez realizada la request, puede escribir esto en el depurador:

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

4 es NSUTF8StringEncoding , como se define en NSString.h.

El parámetro HTTPMethod proporciona el método (GET, POST, PUT, etc.) como un NSString .

Respuestas HTTP (datos entrantes)

Cuando su server responde, su bloque de finalización de éxito se pasa a un object AFHTTPRequestOperation (denominado operation por defecto). Usted puede:

  • p (int)[[operation response] statusCode] para ver el código de estado
  • po [[operation response] allHeaderFields] para ver los encabezados
  • po [operation responseString] para ver el cuerpo de respuesta
  • po [operation responseObject] para ver el object de respuesta (que puede ser nil si no se pudo serializar)

A partir de AFNetworking 2.0, debe usar AFNetworkActivityLogger

 #import "AFNetworkActivityLogger.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef DEBUG [[AFNetworkActivityLogger shanetworkingLogger] startLogging]; [[AFNetworkActivityLogger shanetworkingLogger] setLevel:AFLoggerLevelDebug]; #endif return YES; } 

Si está utilizando 3.0 y está utilizando CocoaPods , también deberá extraer AFNetworkActivityLogger de la twig adecuada:

 pod 'AFNetworkActivityLogger', git: 'https://github.com/AFNetworking/AFNetworkActivityLogger.git', branch: '3_0_0' 

Debería echar un vistazo a https://github.com/AFNetworking/AFHTTPRequestOperationLogger con AFLoggerLevelDebug como nivel de debugging.

 #import "AFHTTPRequestOperationLogger.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef DEBUG [[AFHTTPRequestOperationLogger shanetworkingLogger] startLogging]; [[AFHTTPRequestOperationLogger shanetworkingLogger] setLevel:AFLoggerLevelDebug]; #endif return YES; } @end