-
Notifications
You must be signed in to change notification settings - Fork 1
Home
zhtut edited this page Dec 12, 2021
·
6 revisions
iOS支持设置https SNI的网络库 用swift源码修改来的,把网络库URLSession抽离出来了,使用的是swift的release/5.6版本,应该是比较安全的 依赖了CFURLSessionInterface库,也是Swift Foundation抽离的一个c库,主要功能是对libcurl的封装 libcurl是自己编译的7.80.0版本
使用方法,先找到host和ip,然后设置resolve到header中
let host = "" let ip = "" let resolve = "\(host):443:\(ip)" setValue(resolve, forHTTPHeaderField: "resolve")
也可以设置connectTo属性
let host = "" let ip = "" let connectTo = "\(host):443:\(ip):443" setValue(connectTo, forHTTPHeaderField: "connectTo")
这两个应该都可以支持sni功能,但哪个好用我也还没试,底下的代码为:
` func set(connectTo: String) { let list = _CurlStringList([connectTo]) try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionCONNECT_TO, list.asUnsafeMutablePointer).asError() connectToList = list }
func set(resolve: String) {
let list = _CurlStringList([resolve])
try! CFURLSession_easy_setopt_ptr(rawHandle, CFURLSessionOptionRESOLVE, list.asUnsafeMutablePointer).asError()
try! CFURLSession_easy_setopt_long(rawHandle, CFURLSessionOptionIPRESOLVE, 0).asError()
resolveList = list
}`