带有 Alamofire POST(内容类型 JSON)的 iOS OS 10.3.3 问题
Posted
技术标签:
【中文标题】带有 Alamofire POST(内容类型 JSON)的 iOS OS 10.3.3 问题【英文标题】:iOS OS 10.3.3 with Alamofire POST (content type JSON) Issue 【发布时间】: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
对象来控制它的可变性。
【参考方案1】:
我想我自己想通了。
-
刚刚删除了
let authHeader = ["":""]
行。
从请求行中删除了 headers: authHeader
参数。
终于删除了(options: JSONSerialization.ReadingOptions.mutableContainers)
。
【讨论】:
我在标题中传递空白参数时犯了同样的错误。谢谢..以上是关于带有 Alamofire POST(内容类型 JSON)的 iOS OS 10.3.3 问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?
带有 CRUD/Rest 的 Alamofire POST 参数