前两天 app突然重复出现获取数据失败的提示(alert),造成了非常差的用户体验,通过网络抓包发现有一个请求状态为302,一番搜索,发现这是重定向(如果不知道就自行查一下),所有的AF请求都会在post get等请求前执行下面这个方法,所以只需重写这个方法就能拦截请求
manager = [AFHTTPSessionManager manager];
[manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLResponse * _Nonnull response, NSURLRequest * _Nonnull request) {
NSHTTPURLResponse *resPonse = (NSHTTPURLResponse *)response;
//1、如果要忽略重定向
/*
if (resPonse.statusCode == 302){
return nil;
}else {//正常请求
return request;
}
*/
// 2、通过重定向url去获取数据
if (resPonse.statusCode == 302){//如果响应code==302 就是重定向
NSMutableURLRequest *res = [NSMutableURLRequest requestWithURL:request.URL];
//通过抓包发现请求头不见了 所以在这里添加请求头,如果没有这个需求的可以忽略
NSMutableDictionary *headers = [NSMutableDictionary dictionaryWithDictionary:request.allHTTPHeaderFields];
NSString *valueStr = [NSString stringWithFormat:@" %@",localToken];
[headers setObject:valueStr forKey:@"Authorization"];
res.allHTTPHeaderFields = headers;
return res;
}else {//正常请求
return request;
}
}];
个人笔记,勿喷 😄
网友评论