Ios AF3.0-错误的授权代码

Ios AF3.0-错误的授权代码,ios,objective-c,http-response-codes,afnetworking-3,Ios,Objective C,Http Response Codes,Afnetworking 3,我使用AFHTTPSessionManager获取带有授权头的请求 如果用户/密码错误,根据postman,服务器返回的内容类型为:text/html,带有: <!DOCTYPE html> <html> <head> <title>Apache Tomcat/8.0.21 - Error report</title> <style type="text/css">H1 {font-f

我使用AFHTTPSessionManager获取带有授权头的请求

如果用户/密码错误,根据postman,服务器返回的内容类型为:text/html,带有:

<!DOCTYPE html>
<html>
    <head>
        <title>Apache Tomcat/8.0.21 - Error report</title>
        <style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> 
    </head>
    <body>
        <h1>HTTP Status 401 - Błąd podczas autentykacji</h1>
        <div class="line"></div>
        <p>
            <b>type</b> Status report
        </p>
        <p>
            <b>message</b>
            <u>Błąd podczas autentykacji</u>
        </p>
        <p>
            <b>description</b>
            <u>This request requires HTTP authentication.</u>
        </p>
        <hr class="line">
        <h3>Apache Tomcat/8.0.21</h3>
    </body>
</html>
返回状态代码,500

以及N错误

  NSString* errorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
        NSLog(@"Error response: %@", errorResponse);
返回错误响应:{“Error”:{“code”:“UNKNOWN_Error”,“details”:null,“description”:“Server Error”,“version”:0}

这是我的get操作方法

- (void)getOperationForAction:(NSString *)action
                   parameters:(NSArray *)params
                   completion:(id (^)(id json, BOOL success))completion {
    NSURL *url = [self apiUrlForAction:action params:params.mutableCopy];
    AFHTTPSessionManager *manager = [self sessionManager];

    [manager GET: url.absoluteString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"JSON: %@", responseObject);

        if (completion) {
            completion(responseObject, YES);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSString *responseString = [[NSString alloc] initWithData:(NSData *)error.userInfo[NSLocalizedRecoverySuggestionErrorKey] encoding:NSUTF8StringEncoding];
        if(responseString != nil && ![responseString isEqualToString: @""]) {
            NSData *JSONData = [responseString dataUsingEncoding: NSUTF8StringEncoding];
            id responseJSON = [NSJSONSerialization JSONObjectWithData:JSONData options: NSJSONReadingMutableContainers error:nil];
            if(responseJSON != nil) {

            }
        }

        NSHTTPURLResponse *test = (NSHTTPURLResponse *)task.response;
        NSLog (@"Status code, %i", test.statusCode);

        NSString* errorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
        NSLog(@"Error response: %@", errorResponse);

        ApiError *apiError = [[ApiError alloc] initWithString:errorResponse error:nil];

        completion(apiError, NO);
    }];
}
请求处理正确-401问题是在我故意使用错误的身份验证登录名/密码检查响应错误时出现的。问题在于前面提到的状态代码不正确

@编辑 为了

状态代码,500 错误代码,-1011
Error domain,com.alamofire.Error.serialization.response

使用Postman进行测试时返回的状态码是什么?如果是500,那么它和你在AFNetworking中看到的一样,这意味着你的AFNetworking使用没有问题。服务器返回的是一个500的情况下,你更喜欢401。除非你能控制服务器,否则你只需要处理它(例如,解析500响应的主体以查找嵌入的401状态)。就像你们在上面看到的身体一样。使用旧版本的AFNetworking和AFHTTPRequestOperation获得状态代码401。500表示“内部服务器错误”。服务器可能希望呈现401错误,但在生成错误时遇到错误。检查服务器日志。此外,为了调试类似的东西,我建议您学习使用Wireshark或其他网络捕获软件来分析实际通过网络发送的内容:如果您在Wireshark中检查HTTP响应,您可能会在响应数据包中看到错误代码500(AFNetworking在解析响应代码时不太可能出现严重错误,特别是因为它正在包装Cocoa类)。我知道每个状态码的意思。我将使用AFNetworking 3.0从我的ApiClass使用纯邮递员和URLResponse/NSError向您展示从请求返回的所有数据。因此,您在生成错误时对wiresharks和error的评论是无用的。服务器给了我正确的401回复(通过邮递员检查),但我担心网络以错误的方式处理此错误。AFNetworking的重点-错误处理可能的问题,而不是服务器端。服务器端也可以通过android/WP应用程序进行检查-它返回401。不,实际上,你们并没有提到邮递员正在返回401。答案的主体,你确实粘贴到了你的问题中,碰巧提到了401。这并不意味着实际的HTTP状态代码也是401。既然你说邮递员确实返回了401,并且第一次提到你从AFNetworking 2.x获得了401,也许你应该向我们展示你编写的代码的AFNetworking 3.x版本。当与邮递员一起测试时,返回的状态代码是什么?如果是500,那么它和你在AFNetworking中看到的一样,这意味着你的AFNetworking使用没有问题。服务器返回的是一个500的情况下,你更喜欢401。除非你能控制服务器,否则你只需要处理它(例如,解析500响应的主体以查找嵌入的401状态)。就像你们在上面看到的身体一样。使用旧版本的AFNetworking和AFHTTPRequestOperation获得状态代码401。500表示“内部服务器错误”。服务器可能希望呈现401错误,但在生成错误时遇到错误。检查服务器日志。此外,为了调试类似的东西,我建议您学习使用Wireshark或其他网络捕获软件来分析实际通过网络发送的内容:如果您在Wireshark中检查HTTP响应,您可能会在响应数据包中看到错误代码500(AFNetworking在解析响应代码时不太可能出现严重错误,特别是因为它正在包装Cocoa类)。我知道每个状态码的意思。我将使用AFNetworking 3.0从我的ApiClass使用纯邮递员和URLResponse/NSError向您展示从请求返回的所有数据。因此,您在生成错误时对wiresharks和error的评论是无用的。服务器给了我正确的401回复(通过邮递员检查),但我担心网络以错误的方式处理此错误。AFNetworking的重点-错误处理可能的问题,而不是服务器端。服务器端也可以通过android/WP应用程序进行检查-它返回401。不,实际上,你们并没有提到邮递员正在返回401。答案的主体,你确实粘贴到了你的问题中,碰巧提到了401。这并不意味着实际的HTTP状态代码也是401。既然你说邮递员确实返回了401,并且第一次提到你从AFNetworking 2.x获得了401,也许你应该向我们展示你编写的代码的AFNetworking 3.x版本。
- (void)getOperationForAction:(NSString *)action
                   parameters:(NSArray *)params
                   completion:(id (^)(id json, BOOL success))completion {
    NSURL *url = [self apiUrlForAction:action params:params.mutableCopy];
    AFHTTPSessionManager *manager = [self sessionManager];

    [manager GET: url.absoluteString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"JSON: %@", responseObject);

        if (completion) {
            completion(responseObject, YES);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSString *responseString = [[NSString alloc] initWithData:(NSData *)error.userInfo[NSLocalizedRecoverySuggestionErrorKey] encoding:NSUTF8StringEncoding];
        if(responseString != nil && ![responseString isEqualToString: @""]) {
            NSData *JSONData = [responseString dataUsingEncoding: NSUTF8StringEncoding];
            id responseJSON = [NSJSONSerialization JSONObjectWithData:JSONData options: NSJSONReadingMutableContainers error:nil];
            if(responseJSON != nil) {

            }
        }

        NSHTTPURLResponse *test = (NSHTTPURLResponse *)task.response;
        NSLog (@"Status code, %i", test.statusCode);

        NSString* errorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
        NSLog(@"Error response: %@", errorResponse);

        ApiError *apiError = [[ApiError alloc] initWithString:errorResponse error:nil];

        completion(apiError, NO);
    }];
}
    NSHTTPURLResponse *test = (NSHTTPURLResponse *)task.response;
    NSLog (@"Status code, %i", test.statusCode);
    NSLog (@"Error code, %i", error.code);
    NSLog (@"Error domain, %@", error.domain);