我有一个使用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];
答案 0 :(得分:2)
您需要使用符合您需要的超时值初始化NSURLRequest。
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:inURL
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:10.0];
请参阅NSMutableURLRequest文档。
然后,使用初始化的AFHTTPRequestOperation
请求初始化AFNetworking的NSMutableURLRequest
。
答案 1 :(得分:0)
当请求因代码401失败时,将调用操作的失败块,您尚未设置该失败块。使用以下AFHTTPRequestOperation方法进行操作,将立即调用故障块。
- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
对不起,没注意到这个帖子已经6个月了!无论如何,对于仍然面临问题的人来说,答案仍然存在。