Pour des raisons de débogage, j'aimerais imprimer le corps de la requête dans son intégralité. J'utilise AFHTTPClient. Le client d’impression donne des informations, comme les en-têtes, mais les paramètres post/get ne sont pas là.
Y a-t-il un moyen de le faire?
Pour AFNetworking 1.x, utilisez AFHTTPRequestOperationLogger
.
Pour AFNetworking 2.x, utilisez AFNetworkActivityLogger
.
Ces outils utilisent tous les deux la variable NSNotification
diffusée par AFNetworking pour consigner les données de requête et de réponse sur la console. La quantité d'informations à afficher est configurable et peut être configurée pour ignorer certaines opérations.
Si vous souhaitez examiner le corps d'une requête sortante, examinez le paramètre NSURLRequest
de HTTPBody
, qui est une propriété de votre AFHTTPRequestOperation
.
Par exemple, dans la méthode -[AFHTTPClient getPath:
parameters:
success:
failure:]
, une fois la demande effectuée, vous pouvez le saisir dans le débogueur:
po [[NSString alloc] initWithData:request.HTTPBody encoding:4]
4 est NSUTF8StringEncoding
, tel que défini dans NSString.h.
Le paramètre NSURLRequest
de HTTPMethod
fournit la méthode (GET, POST, PUT, etc.) sous la forme d'une NSString
.
Lorsque votre serveur répond, un objet AFHTTPRequestOperation
(appelé operation
par défaut) est transmis à votre bloc d'achèvement de réussite. Vous pouvez:
p (int)[[operation response] statusCode]
pour voir le code d'étatpo [[operation response] allHeaderFields]
pour voir les en-têtespo [operation responseString]
pour voir le corps de la réponse po [operation responseObject]
pour voir l'objet de réponse (qui peut être nil
s'il ne peut pas être sérialisé)Depuis AFNetworking 2.0, vous devez utiliser 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;
}
Si vous utilisez 3.0
et CocoaPods, vous devrez également extraire AFNetworkActivityLogger
de la branche appropriée:
pod 'AFNetworkActivityLogger', git: 'https://github.com/AFNetworking/AFNetworkActivityLogger.git', branch: '3_0_0'
Vous devriez consulter https://github.com/AFNetworking/AFHTTPRequestOperationLogger avec AFLoggerLevelDebug comme niveau de débogage.
#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
Pour que AFNetworking 3.0 puisse définir le niveau de journalisation, vous avez besoin des éléments suivants:
#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;
}