我使用下面的代码制作一个URLRequest,但特殊字符,如&,未正确编码。我做错了什么?
var request = URLRequest(url: URL(string: "http://\(hostToUse)/user/login")!)
request.httpMethod = "POST"
request.timeoutInterval = 120.0
var postString = "data={\"userName\":\"\(username)\",\"password\":\"\(password)\"}"
postString = postString.addingPercentEncoding(withAllowedCharacters: .alphanumerics)!
postString = postString.replacingOccurrences(of: " ", with: "")
request.httpBody = postString.data(using: .utf8, allowLossyConversion: false)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
答案 0 :(得分:0)
&安培;是一个特殊的角色,你可以
let newString = aString.replacingOccurrences(of: "&", with: "%20")
答案 1 :(得分:0)
此代码存在许多可能的问题:
URLQueryAllowedCharacterSet
对于单个查询字符串字段来说太宽泛,因为它允许在正常使用查询字符串时保留为字段分隔符的等号和符号等字符。
为了最大限度地提高安全性,您应该使用自己的包含 无保留字符的字符集:
[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuv"
"wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"]
或者更好的是,使用NSURLComponents
。它具有专门用于构造查询字符串的属性。