【发布时间】:2017-08-07 14:24:30
【问题描述】:
我一直在开发 iOS 应用并使用 Alamofire 4.0 / Swift 3.1 / Xcode 8.3.3 调用我的网络服务。
在我的 iPhone 运行 OS 10.0 之前,一切似乎都运行良好。我今天将我的 iPhone 更新到 10.3.3,突然我的网络服务停止工作。
这是我一直在使用的代码:
class func verifyLoginCredentials(_ username: String, password: String, completion: @escaping (_ type: ResponseType , _ response : Int, _ message: String) -> Void) {
var serviceURL = baseURL + "&task=login&email=" + username + "&pwd=" + password
serviceURL = serviceURL.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
let url = URL(string: serviceURL)
let authHeader = ["":""]
print(url!)
request(url!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: authHeader).responseJSON(options:
JSONSerialization.ReadingOptions.mutableContainers) { (serverResponse) -> Void in
switch serverResponse.result {
case .success(let JSON):
debugPrint(JSON)
if (JSON as AnyObject).value(forKey: "status") as! Int == 1 {
completion( ResponseType.kresponseTypeSuccess,(JSON as AnyObject).value(forKey: "status") as! Int, "")
// Set User Session
CFunctions.setLoginSession(JSON as AnyObject)
} else {
completion( ResponseType.kresponseTypeSuccess,(JSON as AnyObject).value(forKey: "status") as! Int, (JSON as AnyObject).value(forKey: "response") as! String)
}
case .failure(let error):
let dataString = String(data: serverResponse.data!, encoding: String.Encoding.utf8)
print("verifyLoginCredentials Request failed with error: \(String(describing: dataString))")
completion(ResponseType.kResponseTypeFail, error._code, "Service failed")
}
}
}
这是我在控制台中得到的:
http://198.1.109.253/~ecc2014/api/?verifyKey=abcdefghijklmnopqrstuvwxyz&task=login&email=user@yopmail.com&pwd=secret
verifyLoginCredentials Request failed with error: Optional("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>400 Bad Request</title>\n</head><body>\n<h1>Bad Request</h1>\n<p>Your browser sent a request that this server could not understand.<br />\n</p>\n<hr>\n<address>Apache/2.4.27 (cPanel) OpenSSL/1.0.2k mod_bwlimited/1.4 Server at 198.1.109.253 Port 80</address>\n</body></html>\n")
我想在这里再提一件事。我的 Web 服务以前是从旧域 (http://www.exoticcarclub.net/api/?) 调用的。现在我的网络服务已经移到了一个新的服务器上,它的域名还没有被指出,所以他们给了我http://198.1.109.253/~ecc2014/api/?替换为。我想这也可能是罪魁祸首。
有人能指出 OS 10.3.3 中发生了什么吗?任何帮助将不胜感激。谢谢。
【问题讨论】:
-
停止工作是什么意思?你得到一个错误还是什么?
-
更新了我的问题。
-
该错误似乎与您的代码无关。这要么是后端问题,要么是在迁移服务器时请求已更改,您需要更新代码以匹配新的请求格式。
-
好吧,我想通了。我刚刚删除了
let authHeader = ["":""]行并从请求行中删除了headers: authHeader参数,最后删除了(options: JSONSerialization.ReadingOptions.mutableContainers)并且它起作用了。 -
是的,怀疑这是一个配置错误。
mutableContainers选项在Swift中没有用,您可以通过使用let或var关键字声明JSON对象来控制它的可变性。
标签: ios iphone swift alamofire