Swift/Swift4中如何将HTTP URL转换为HTTPS URL?
在Swift(含Swift 4)中将HTTP URL转换为HTTPS的方法
嘿,这个需求其实挺普遍的,尤其是现在全站HTTPS成为标配的环境下。我给你分享两种实用方案,从快速解决到严谨通用,适配不同场景:
一、快速字符串替换法(适合标准简单URL)
如果你的URL是像http://www.myWebsite.com这种标准格式,开头明确是http://,那直接用字符串替换就够简单高效,Swift 4及之后版本都支持:
let httpUrlString = "http://www.myWebsite.com" // 替换协议头 let httpsUrlString = httpUrlString.replacingOccurrences(of: "http://", with: "https://") // 转换成URL对象(可选,根据需求来) if let httpsUrl = URL(string: httpsUrlString) { print("转换后的HTTPS URL:\(httpsUrl)") }
注意点:
这个方法的优点是快,但只适合确定URL开头是http://的场景。如果URL的其他部分(比如参数、路径里)也包含http://字符串,就会误替换,所以只推荐处理简单的、规范的HTTP URL。
二、严谨的URLComponents处理法(通用所有合法HTTP URL)
如果你的URL带路径、查询参数、锚点,或者不确定格式,那用URLComponents来修改协议是更安全的方案,Swift 4完全兼容这个API:
let httpUrlString = "http://www.myWebsite.com/article?id=123#section-2" // 先把字符串转成URL对象,再初始化URLComponents guard let httpUrl = URL(string: httpUrlString), var components = URLComponents(url: httpUrl, resolvingAgainstBaseURL: true) else { print("原URL不合法,转换失败") return } // 修改协议为https components.scheme = "https" // 得到最终的HTTPS URL if let httpsUrl = components.url { print("转换后的HTTPS URL:\(httpsUrl)") }
细节差异说明:
- HTTP默认端口是80,HTTPS默认是443,修改scheme后,URLComponents会自动适配默认端口(比如原URL是
http://www.myWebsite.com:80,转换后会变成https://www.myWebsite.com,自动去掉80端口,用HTTPS的默认443) - 如果原URL是自定义端口的HTTP(比如
http://www.myWebsite.com:8080),修改scheme后端口还是8080,如果你需要改成HTTPS的默认端口443,手动加一行components.port = 443即可。
内容的提问来源于stack exchange,提问作者iKK
相关产品推荐
相关产品推荐

