AFNetworking 2 空 POST 响应但没有错误

AFNetworking 2 empty POST response but no errors

这是一个非常棘手的问题:

我向服务器发出 POST 请求(登录)。

服务器将回答:

代码:

func login (id: String, password: String){

    self.responseSerializer = AFJSONResponseSerializer()
    self.responseSerializer.acceptableContentTypes =  nil
    self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 400)
    //self.responseSerializer.acceptableStatusCodes = nil

    var param = ["id": lbid, "password": password]

    POST(APIURL.URL_LOGIN, parameters: param,

       { (operation : NSURLSessionDataTask!, response : AnyObject!) -> Void in
            //var finalResponse : Dictionary = Dictionary<String, String>()
            var tmp = response as String

            self.defaults.setObject(tmp, forKey: "USERSSID")
            self.defaults.setBool(true, forKey: "USERLOGGEDIN")

            println("Success login")

        }) { (operation : NSURLSessionDataTask!, error : NSError!) -> Void in

            println(error)
    }
}

它执行失败博客,我得到这个错误:

    Code=-1011 "Request failed: no error (200)" UserInfo=0x7f9fa1534760 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7f9fa15791e0> { URL: https://************ } { status code: 200, headers {
Connection = "Keep-Alive";
"Content-Length" = 107;
"Content-Type" = "application/json";
Date = "Wed, 04 Mar 2015 21:47:51 GMT";
"Keep-Alive" = "timeout=7, max=150";
Server = Apache;
"Set-Cookie" = "SID=************; expires=Mon, 02-Mar-2020 21:47:51 GMT; path=/;domain=.*********";}},NSErrorFailingURLKey=https://***********,com.alamofire.serialization.response.error.data=< CORRECT POST BODY>, NSLocalizedDescription=Request failed: no error (200)}

如果我删除这段代码:

self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 400)

然后应用程序崩溃了。但是服务器响应状态代码为 200...

我不知道如何解决这个问题。 你可以帮帮我吗? 在这里我得到了正确的body。但是为什么在正常成功的博客里不行呢?

编辑:

    self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 200)

=> 应用程序崩溃

    self.responseSerializer.acceptableStatusCodes = nil

=> 应用程序崩溃

    self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 401)

=> 应用程序没有崩溃,但执行失败块。错误消息中的状态代码为 200,错误数据包含正确的 POST 响应 body。 => 我可以从错误数据中提取消息...但这是一个如此简单的任务。它必须正常工作。

无法使用 Alamofire,因为我想使用 ssl 证书!

最终编辑: 不要不知道为什么,但是错误自己消失了。

如果您还没有这样做,请查看 Postman(一个 Google Chrome 应用程序)。这是调试 AFNetworking 问题的最佳方法,方法是模拟相同的请求并确保数据正确通过。很多次,我一直在解决一个问题,然后使用 Postman 并发现这是服务器正在做的事情。

我发现了一些内容:

acceptableStatusCodes

The acceptable HTTP status codes for responses. When non-nil, responses with status codes not contained by the set will result in an error during validation.

在Objective C中:

self.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];

之前的post对修复它很有用。我正在搜索越来越多,但没有任何帮助。我尝试添加不同的代码并厌倦了很多次。终于看到上面的post,果然解决了问题。我花了 2 天时间找到解决方案。 最初得到错误 -1011 和 400 错误。我使用以下方法解决了:

manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];

再次遇到类似这样的不同错误:“200 没有错误”。我用下面的代码解决了:

manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];

有效!!酷!!

因此,我建议你们添加以下代码集:

manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];
manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];

感谢 Whosebug!!!!