【问题标题】:AFNetworking Expected status code in (200-299), got 403AFNetworking 在 (200-299) 中的预期状态码,得到 403
【发布时间】:2013-05-30 20:08:19
【问题描述】:

尝试将我的代码从 ASIHttpRequest 迁移到 AFNetworking。似乎有人问过类似的问题,但couldnt 找到了我的问题的解决方案。

我的代码在 ASIHttpRquest 上运行良好。

我向我的服务器发送一个简单的 post 请求并监听 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));
    }

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]);
    }];

NSLOG:

 failure Expected status code in (200-299), got 403

我该如何解决这个问题?

【问题讨论】:

    标签: ios objective-c post afnetworking


    【解决方案1】:

    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) {}
    }];
    

    【讨论】:

      【解决方案2】:

      当您创建请求操作时,您需要告诉它哪些响应状态代码是可接受的(表示成功)。默认情况下,这是 200 -> 299 范围内的代码。

      开始使用客户端之前的设置:

      AFHTTPRequestOperation.acceptableStatusCodes = ...;
      
      [client postPath:
      

      文档是here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-26
        • 1970-01-01
        • 2021-05-24
        • 1970-01-01
        相关资源
        最近更新 更多