AFNetworking预期状态代码(200-299),得到403

u.g*_*gen 2 post objective-c ios afnetworking

试图将我的代码迁移ASIHttpRequestAFNetworking.似乎已经提出了类似的问题,但couldnt找到了我的问题的解决方案.

我的代码工作正常ASIHttpRquest.

我向我的服务器发送一个简单的帖子请求并听取http响应.如果http response是200一切正常,但如果我发送另一个状态代码> 400 AFNetworking块失败.

服务器端响应:

$rc = $stmt->fetch();
    if ( !$rc ) {
    //  echo "no such record\n";
      $isrecordExist=0; //false does not exists
      sendResponse(403, 'Login Failed');
      return false;
    }
    else {
     // echo 'result: ', $result, "\n";
       $sendarray = array(
            "user_id" => $result,
        );
        sendResponse(200, json_encode($sendarray));
    }
Run Code Online (Sandbox Code Playgroud)

IOS部分:

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:
                            [NSURL URLWithString:server]];
    client.allowsInvalidSSLCertificate=YES;

    [client postPath:loginForSavingCredientials parameters:params success:^(AFHTTPRequestOperation *operation, id response) {
    if (operation.response.statusCode == 500) {}
     else if (operation.response.statusCode == 403) {}
     else if (operation.response.statusCode == 200) {//able to get results here            NSError* error;
        NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSDictionary* json =     [NSJSONSerialization JSONObjectWithData: [responseString dataUsingEncoding:NSUTF8StringEncoding]
                                                                 options: NSJSONReadingMutableContainers
                                                                   error: &error];}
 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"failure %@", [error localizedDescription]);
    }];
Run Code Online (Sandbox Code Playgroud)

NSLog的:

 failure Expected status code in (200-299), got 403
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Cra*_*ens 12

AFNetworking得到一个2xx(成功)状态代码,它调用成功块.

当它获得4xx(客户端错误)或5xx(服务器错误)状态代码时,它会调用故障块,因为出现了问题.

因此,您需要做的就是将检查500或403状态代码移至故障块.

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:server]];
client.allowsInvalidSSLCertificate=YES;

[client postPath:loginForSavingCredientials parameters:params success:^(AFHTTPRequestOperation *operation, id response) {
    if (operation.response.statusCode == 200) {//able to get results here            NSError* error;
        NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSDictionary* json = [NSJSONSerialization JSONObjectWithData: [responseString dataUsingEncoding:NSUTF8StringEncoding]
                                                             options: NSJSONReadingMutableContainers
                                                               error: &error];
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"failure %@", [error localizedDescription]);
    if (operation.response.statusCode == 500) {}
    else if (operation.response.statusCode == 403) {}
}];
Run Code Online (Sandbox Code Playgroud)