web-dev-qa-db-ja.com

AFNetworkingリクエストをRAWデータとして印刷する方法

デバッグのために、リクエスト本文全体を出力したいと思います。 AFHTTPClientを使用しています。印刷クライアントはヘッダーなどの情報を提供しますが、post/get paramsはそこにはありません。

それを行う方法はありますか?

25
Jacek Kwiecień

組み込みAFNetworkingツール

AFNetworking 1.xの場合、 AFHTTPRequestOperationLogger を使用します。

AFNetworking 2.xの場合、 AFNetworkActivityLogger を使用します。

これらのツールは両方とも、AFNetworkingによるNSNotificationブロードキャストを使用して、要求と応答のデータをコンソールに記録します。表示される情報の量は構成可能であり、特定の操作を無視するように構成できます。

これらのツールを使用しないXcodeでの検査

HTTPリクエスト(送信データ)

送信リクエストの本文を確認する場合は、NSURLRequestのプロパティであるHTTPBodyAFHTTPRequestOperationパラメータを確認してください。

たとえば、メソッド_-[AFHTTPClient getPath: parameters: success: failure:]_では、要求が行われた後、これをデバッガーに入力できます。

_po [[NSString alloc] initWithData:request.HTTPBody encoding:4]_

4はNSString.hで定義されているように_NSUTF8StringEncoding_です

NSURLRequestHTTPMethodパラメータは、メソッド(GET、POST、PUTなど)をNSStringとして提供します。

HTTP応答(受信データ)

サーバーが応答すると、成功完了ブロックにAFHTTPRequestOperationオブジェクト(デフォルトではoperationと呼ばれます)が渡されます。あなたはできる:

  • p (int)[[operation response] statusCode]ステータスコードを表示する
  • ヘッダーを表示する_po [[operation response] allHeaderFields]_
  • _po [operation responseString]_応答本文を表示する
  • _po [operation responseObject]_応答オブジェクトを確認するには(シリアル化できなかった場合はnilになる場合があります)
38
Aaron Brager

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'
21
Zee

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
17
Benjamin Toueg

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;
}
1
Alex