2

ネットワーク呼び出しに AFNetworking を使用する iOS アプリケーションがあります。401 ステータス コードをキャプチャしようとしている場合を除いて、すべてがうまく機能します。呼び出しから応答が返ってくるまでには、常に約 60 秒かかります。これを引き起こす設定または何かはありますか?成功した呼び出しはすべて即座に返されます。また、このコードをcurlで実行しようとしましたが、401がすぐに返されます。私が使用しているコードは次のとおりです。

        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

        __weak AFHTTPRequestOperation *_operation = operation;

        [operation setCompletionBlock:^{
                    //It takes 60 seconds to get to this line if a 401 is encountered
            DDLogInfo(@"Response body: %@", [_operation responseString]);

            if(_operation.response.statusCode == 401) {
                DDLogInfo(@"Expired Auth Token");
            }

            NSError *error = [_operation error];        
            NSData *responseData = [_operation responseData];

            if(responseData == nil && error == nil)
                error = [NSError errorWithDomain:isDevMode ? DEV_SERVICE_BASE_URL : SERVICE_BASE_URL code:-1 userInfo:nil];

            callback(error, responseData);
        }];

        [operation start];   
4

2 に答える 2

2

ニーズに合ったタイムアウト値で NSURLRequest を初期化する必要があります。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:inURL 
                                                       cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                                                   timeoutInterval:10.0];

NSMutableURLRequestのドキュメントを参照してください。

次に、その初期化された要求で AFNetworkingAFHTTPRequestOperationを初期化しますNSMutableURLRequest

于 2012-06-20T17:06:05.293 に答える
0

コード401でリクエストが失敗すると、設定していない操作の失敗ブロックが呼び出されます。操作には次のAFHTTPRequestOperationのメソッドを使用すると、失敗ブロックが即座に呼び出されます。

- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                              failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

申し訳ありませんが、このスレッドが6か月前のものであることに気づきませんでした。とにかく、まだ問題に直面している人にとっては、答えは残っています。

于 2013-01-07T06:25:35.657 に答える