这是一个非常棘手的问题:
我对服务器发出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 ...
我不知道如何解决这个问题。 你可以帮帮我吗? 在这里,我得到了正确的身体。但为什么不在正常的成功博客?
编辑:
self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 200)
=&GT;应用程序崩溃
self.responseSerializer.acceptableStatusCodes = nil
=&GT;应用程序崩溃
self.responseSerializer.acceptableStatusCodes = NSIndexSet(index: 401)
=&GT;应用程序没有崩溃,但执行故障阻止。错误消息中的状态代码为200,错误数据包含正确的POST响应正文。 =&GT;我可以从错误数据中提取消息......但这是一项如此简单的任务。它必须正常工作。
无法使用Alamofire,因为我想使用ssl证书!
最终编辑: 不是没有原因,但错误本身就消失了。
答案 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 !!!!