Swift 4 - NSURLComponents设置密码,其中包含正斜杠

xienkqul  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(133)

我正在使用NSURLComponents,并正在设置用户名和密码:

let urlComponents = NSURLComponents(string: webservice);
urlComponents?.user = username;
urlComponents?.password = password;

字符串
我使用的密码中有一个特殊字符(正斜杠/)
我已经确认输入的密码是正确的,我正在尝试的所有其他密码都是正确的,除了带有this /的密码。
我必须摆脱特殊角色吗?
以下是完整的方法:

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()

    }


我尝试时得到错误

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]


我得到的错误:
错误域=NSCocoaErrorDomain代码=3840“字符0附近的值无效。”UserInfo={NSDebugDescription=字符0附近的值无效。}

93ze6v8z

93ze6v8z1#

永远不要将密码作为URL的一部分传递。URL以明文形式发送到上游DNS服务器。
而且你的目的也不明确“@”符号和“/”字符在URL中不是法律的字符。“/”是法律的的,但它是一个路径分隔符。

hkmswyz6

hkmswyz62#

正斜杠字符必须在authority组件中百分比编码为“%2F”(用户和密码是authority的userinfo子组件中的字段),因为它是URI/URL字符串中的保留字符,一个通用分隔符。如果正斜杠不是百分比编码的,那么它将标记权限组件的结尾,并成为路径组件的第一个字符。
此外(正如Michael Shulman的回答所指出的),RFC 3986表示在URL的userinfo子组件中使用格式“user:password”是不推荐的--这是因为以明文形式传递身份验证信息已被证明是一个安全风险。

相关问题