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文档。

AFHTTPRequestOperation然后,使用该初始化NSMutableURLRequest请求初始化 AFNetworking 。

于 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 回答