| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- //
- // RequestTool.m
- // TianShanTrek
- //
- // Created by 韩驰 on 2018/6/1.
- // Copyright © 2018 Ellina. All rights reserved.
- //
- #import "RequestTool.h"
- #import "NetworkConfig.h"
- @implementation RequestTool
- + (void)get:(NSString *)url params:(NSDictionary *)params success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure{
- // 1.创建请求管理者
- AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
- mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", nil];
- mgr.requestSerializer = [AFJSONRequestSerializer serializer];
- [mgr.requestSerializer setValue:@"*/*" forHTTPHeaderField:@"Accept"];
- [mgr.requestSerializer setValue:@"application/json;charset=utf-8"
- forHTTPHeaderField:@"Content-Type"];
- if([UserModel shareInstance].token){
- [mgr.requestSerializer setValue:[UserModel shareInstance].token
- forHTTPHeaderField:@"Authorization"];
- }
- // [mgr.requestSerializer setValue:sid forHTTPHeaderField:@"sid"];
-
- // 使用版本化URL构建完整请求路径
- NSMutableString * mutaStr = [[NSMutableString alloc] initWithString:[NetworkConfig versionedBaseURL]];
- [mutaStr appendString:url];
-
- #ifdef DEBUG
- NSLog(@"[API Request] %@", mutaStr); // Debug模式下记录完整URL
- #endif
-
- // 2.发送请求GET
- [mgr GET:mutaStr parameters:params headers:nil progress:^(NSProgress * _Nonnull uploadProgress) {
-
- } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
-
- // 防护检查:responseObject 必须是字典
- if (!responseObject || ![responseObject isKindOfClass:[NSDictionary class]]) {
- if (!responseObject) {
- NSLog(@"[RequestTool-GET] Warning: responseObject is nil");
- } else {
- NSLog(@"[RequestTool-GET] Warning: responseObject is not NSDictionary, type: %@", NSStringFromClass([responseObject class]));
- }
- responseObject = @{};
- }
-
- if (success) {
- success(responseObject);
- }
-
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- // [Utilites showMessage:@"网络不给力,请求超时"];
- if (failure) {
- // failure(error);
-
- NSHTTPURLResponse *response = (NSHTTPURLResponse*)task.response;
- //通讯协议状态码
- NSInteger statusCode = response.statusCode;
- //服务器返回的业务逻辑报文信息
- NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
- NSDictionary *json = @{};
- if(![errResponse isEqualToString:@""]){
- json = [self dictionaryWithJson_String:errResponse];
- }
- if ([json[@"status"] integerValue] == 401) {
- NSLog(@"%@",url);
- }
- }
- }];
- }
- + (void)post:(NSString *)url params:(NSDictionary *)params success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
- {
- // 1.创建请求管理者
- AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
-
- // ========== SSL/TLS 验证配置日志 ==========
- #ifdef DEBUG
- NSLog(@"========== SSL/TLS Configuration ==========");
- NSLog(@"[SSL] SecurityPolicy: %@", mgr.securityPolicy);
- NSLog(@"[SSL] ValidatesDomainName: %@", @(mgr.securityPolicy.validatesDomainName));
- NSLog(@"[SSL] AllowInvalidCertificates: %@", @(mgr.securityPolicy.allowInvalidCertificates));
- NSLog(@"========== SSL/TLS Configuration End ==========");
- #endif
-
- mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", nil];
- mgr.requestSerializer = [AFJSONRequestSerializer serializer];
-
- // 设置超时时间
- mgr.requestSerializer.timeoutInterval = 30.0;
-
- [mgr.requestSerializer setValue:@"*/*" forHTTPHeaderField:@"Accept"];
- [mgr.requestSerializer setValue:@"application/json;charset=utf-8"
- forHTTPHeaderField:@"Content-Type"];
- if([UserModel shareInstance].token){
- [mgr.requestSerializer setValue:[UserModel shareInstance].token
- forHTTPHeaderField:@"Authorization"];
- }
-
- // [mgr.requestSerializer setValue:sid forHTTPHeaderField:@"sid"];
-
- // 使用版本化URL构建完整请求路径
- NSMutableString * mutaStr = [[NSMutableString alloc] initWithString:[NetworkConfig versionedBaseURL]];
- [mutaStr appendString:url];
-
- #ifdef DEBUG
- NSLog(@"========== API Request START ==========");
- NSLog(@"[API Request] Method: POST");
- NSLog(@"[API Request] URL: %@", mutaStr);
- NSLog(@"[API Request] Params: %@", params);
- NSLog(@"[API Request] Token: %@", [UserModel shareInstance].token ?: @"<none>");
- NSLog(@"[API Request] Base URL: %@", [NetworkConfig versionedBaseURL]);
- NSLog(@"[API Request] Timeout: 30.0 seconds");
- NSLog(@"========================================");
- #endif
-
- // 2.发送请求
- [mgr POST:mutaStr parameters:params headers:nil progress:^(NSProgress * _Nonnull uploadProgress) {
-
- } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- #ifdef DEBUG
- NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
- NSLog(@"========== API Response SUCCESS ==========");
- NSLog(@"[API Response] HTTP Status: %ld", (long)httpResponse.statusCode);
- NSLog(@"[API Response] URL: %@", httpResponse.URL);
- NSLog(@"[API Response] Response Headers: %@", httpResponse.allHeaderFields);
- NSLog(@"[API Response] Data: %@", responseObject);
- NSLog(@"==========================================");
- #endif
-
- // 防护检查:responseObject 必须是字典
- if (!responseObject || ![responseObject isKindOfClass:[NSDictionary class]]) {
- if (!responseObject) {
- NSLog(@"[RequestTool] Warning: responseObject is nil");
- } else {
- NSLog(@"[RequestTool] Warning: responseObject is not NSDictionary, type: %@", NSStringFromClass([responseObject class]));
- }
- responseObject = @{};
- }
-
- if (success) {
- success(responseObject);
- }
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- #ifdef DEBUG
- NSHTTPURLResponse *response = (NSHTTPURLResponse*)task.response;
- NSLog(@"========== API Response FAILURE ==========");
- NSLog(@"[API Error] URL: %@", mutaStr);
- NSLog(@"[API Error] HTTP Status: %ld", (long)response.statusCode);
- NSLog(@"[API Error] Error Code: %ld", (long)error.code);
- NSLog(@"[API Error] Error Domain: %@", error.domain);
- NSLog(@"[API Error] Error Description: %@", error.description);
- NSLog(@"[API Error] Error Localized: %@", error.localizedDescription);
-
- // SSL/TLS 相关错误
- if ([error.domain isEqualToString:NSURLErrorDomain]) {
- if (error.code == NSURLErrorServerCertificateUntrusted) {
- NSLog(@"[API Error] SSL Error: 服务器证书不受信任");
- } else if (error.code == NSURLErrorServerCertificateHasUnknownRoot) {
- NSLog(@"[API Error] SSL Error: 服务器证书的根证书未知");
- } else if (error.code == NSURLErrorServerCertificateNotYetValid) {
- NSLog(@"[API Error] SSL Error: 服务器证书尚未生效");
- } else if (error.code == NSURLErrorClientCertificateRejected) {
- NSLog(@"[API Error] SSL Error: 客户端证书被拒绝");
- }
- }
-
- NSLog(@"[API Error] Full Error: %@", error);
- NSLog(@"[API Error] Error UserInfo: %@", error.userInfo);
- NSLog(@"==========================================");
- #endif
- if (failure) {
-
- NSHTTPURLResponse *response = (NSHTTPURLResponse*)task.response;
- //通讯协议状态码
- NSInteger statusCode = response.statusCode;
- //服务器返回的业务逻辑报文信息
- NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
- NSDictionary *json = [self dictionaryWithJson_String:errResponse];
-
- if ([json[@"status"] integerValue] == 401) {
- }else
- {
- NSLog(@"%@",url);
- }
- }
- }];
- }
- + (NSDictionary *)dictionaryWithJson_String:(NSString *)jsonString
- {
- if (jsonString == nil || [jsonString isEqualToString:@""]) {
- return nil;
- }
-
- NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
- NSError *err;
- NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
- options:NSJSONReadingMutableContainers
- error:&err];
- if(err)
- {
- NSLog(@"json解析失败:%@",err);
- return nil;
- }
- return dic;
- }
- @end
|