AFNetworking 2空POST响应但没有错误

时间:2015-03-04 21:50:39

标签: ios ios8 afnetworking

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

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

服务器将回答:

  • ok状态代码:200 + JSON数据
  • 错误状态代码:401 + plain / text

代码:

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 ...

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

编辑:

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

=&GT;应用程序崩溃

    self.responseSerializer.acceptableStatusCodes = nil

=&GT;应用程序崩溃

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

=&GT;应用程序没有崩溃,但执行故障阻止。错误消息中的状态代码为200,错误数据包含正确的POST响应正文。 =&GT;我可以从错误数据中提取消息......但这是一项如此简单的任务。它必须正常工作。

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

最终编辑: 不是没有原因,但错误本身就消失了。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我找到了一些说法:

  

acceptableStatusCodes

     

响应的可接受HTTP状态代码。当非零时,   状态代码未包含在集合中的响应将导致   验证期间出错。

在目标C中:

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

答案 2 :(得分:0)

上一篇文章对修复它非常有用。我的搜索越来越多,但没有任何帮助。我尝试添加不同的代码并且累了很多次。终于看到了上面的帖子,这才真正解决了这个问题。我花了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)];

感谢Stackoverflow !!!!