Ios Swift 4-使用正斜杠设置密码
我正在使用NSURLComponents并设置用户名和密码:Ios Swift 4-使用正斜杠设置密码,ios,swift,Ios,Swift,我正在使用NSURLComponents并设置用户名和密码: let urlComponents = NSURLComponents(string: webservice); urlComponents?.user = username; urlComponents?.password = password; 我使用的密码中有一个特殊字符(正斜杠/) 我已确认输入的密码正确无误,并且我正在尝试使用的所有其他密码都正确无误,但包含此/的密码除外 我必须摆脱这个特殊角色吗 以下是完整的方法: fu
let urlComponents = NSURLComponents(string: webservice);
urlComponents?.user = username;
urlComponents?.password = password;
我使用的密码中有一个特殊字符(正斜杠/)
我已确认输入的密码正确无误,并且我正在尝试使用的所有其他密码都正确无误,但包含此/的密码除外
我必须摆脱这个特殊角色吗
以下是完整的方法:
func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
{
let urlComponents = NSURLComponents(string: webservice);
urlComponents?.user = username;
urlComponents?.password = password
let url = urlComponents?.url;
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if(error != nil){
completion(false)
}else{
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
OperationQueue.main.addOperation({
self.appDelegate.communityArray = json
//Get Community Descrtiptions and add them to appDelegates communityDescriptionArray
self.getCommunities() { (result: Dictionary<String, Dictionary<String, Any>>) in
self.appDelegate.communityList = result
completion(true)
}
})
}catch let error as NSError{
print(error)
completion(false)
}
}
}).resume()
}
我得到的错误是:
错误域=NSCOCAERRORDOMAIN Code=3840“周围的值无效
字符0。“UserInfo={NSDebugDescription=周围的值无效。”
字符0}
您不应将密码作为URL的一部分传递。URL以明文形式发送到上游DNS服务器
而且,不清楚你想做什么。“@”符号和“/”字符在URL中不是合法字符。“/”是合法的,但它是一个路径分隔符。检查
打印(urlComponents!.string!)
–正斜杠应该自动转义。问题可能在其他地方。@Rob:var urlc=URLComponents(字符串:http://myhost.com")!; urlc.user=“user”;urlc.password=“pass/word”;打印(urlc.string!)
打印http://user:pass%2Fword@myhost.com
我确实打印了(urlComponents!.string!),实际上它有%2F而不是/@MartinR-非常正确。我的错。我考虑的是URL中的键/值对,而不是用户
/密码
值。因此,显然服务器返回了一些不是JSON的内容–可能是错误消息?打印字符串(数据:data!,编码:.utf8)
以查看服务器响应。
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]