【问题标题】:API Domain Error on iOS 8 not on iOS 10 version? (AFNetworking)iOS 8 上的 API 域错误不在 iOS 10 版本上? (AF网络)
【发布时间】:2018-04-08 22:47:26
【问题描述】:

我们仅在 iOS 8 版本上面临域错误,无法从 API 获得响应,但相同的代码在 iOS 10 版本上运行良好。我已在下面附上所需的信息,请检查并告诉我是否有任何解决方案。

AFNetworking 版本:3.1.0

错误:

" Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unauthorized (401)" UserInfo=0x7fd440dc6e00 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7fd44586cbb0> { URL: http://......../users/login } { status code: 401, headers {
"Accept-Ranges" = none;
Connection = "keep-alive";
"Content-Length" = 381;
"Content-Type" = "text/html; charset=iso-8859-1";
Date = "Fri, 27 Oct 2017 10:17:40 GMT";
"Keep-Alive" = "timeout=5, max=100";
"Proxy-Support" = "Session-Based-Authentication";
Server = Apache;
Via = "HTTP/1.1 sophos.http.proxy:3128";
"Www-Authenticate" = "Basic realm="Restricted"";
} }" 

代码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
[manager POST:url parameters:parameters 
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData)
 { 
} progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable    responseObject) 
{     
NSLog(@"responseObject %@",responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
 { 
NSLog(@"err : %ld",(long)[error code]); NSLog(@"err : %@",[error description]);
 }];

API: HTTP(开发)

我们添加了 ATS 密钥,

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

在 plist 中。

如果有解决办法请告诉我。

谢谢!

【问题讨论】:

    标签: ios objective-c afnetworking-3 app-transport-security


    【解决方案1】:

    使用此代码代替您的代码

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    
    [manager POST:strUrl parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
        NSError * error=nil;
    
        NSLog(@"Decoded: %@", responseObject);
        NSMutableDictionary * parsedData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];
    
    completionHandler:Callback(parsedData,nil);
    
        NSLog(@"Decoded: %@", parsedData);
    
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    completionHandler:Callback(nil,error);
    
    }];
    

    【讨论】:

    • 谢谢!我试过你的代码不能在 iOS 8.2 中运行,但在 iOS 10.2 中运行良好。
    【解决方案2】:

    我希望此代码适用于 ios 8 或 10

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
    
    [manager POST:stUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if([responseObject isKindOfClass:[NSDictionary class]]) {
            if(success) {
                success(responseObject);
            }
        }
        else {
            NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
            if(success) {
                success(response);
            }
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
        if(failure) {
            failure(error);
        }
    }];
    

    【讨论】:

    • 抱歉,我们使用的是 AFNetwork 版本 3.1.0。不再有 AFHTTPRequestOperationManager 了。我们应该改用 AFHTTPSessionManager。
    猜你喜欢
    • 2015-11-06
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2015-09-18
    • 2021-08-25
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多