Я хочу получить настройки прокси системы мобильного телефона на платформе Flutter на языке Dart, который настраивается пользователем телефона вручную в настройках подключения WI-FI. Я не знаю, есть ли доступный API. Я знаю, как получить эту информацию на собственной платформе, например, iOS:
//获取手机代理
static func getSystemProxy(url: String?) -> [String:Any]? {
guard let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() else { return nil }
guard let url = URL.init(string: url ?? "") else { return nil }
let url2 = url as CFURL
let proxies = CFNetworkCopyProxiesForURL(url2, proxySettings).takeUnretainedValue() as NSArray
guard let proxy = proxies.firstObject as? NSDictionary else { return nil }
let host = proxy.object(forKey: kCFProxyHostNameKey as String) as? String ?? ""
let port = proxy.object(forKey: kCFProxyPortNumberKey as String) as? Int ?? 0
/*
Possible values for kCFProxyTypeKey:
kCFProxyTypeNone - no proxy should be used; contact the origin server directly
kCFProxyTypeHTTP - the proxy is an HTTP proxy
kCFProxyTypeHTTPS - the proxy is a tunneling proxy as used for HTTPS
kCFProxyTypeSOCKS - the proxy is a SOCKS proxy
kCFProxyTypeFTP - the proxy is an FTP proxy
kCFProxyTypeAutoConfigurationURL - the proxy is specified by a proxy autoconfiguration (PAC) file
*/
let none = kCFProxyTypeNone as String
let hTTP = kCFProxyTypeHTTP as String
let hTTPS = kCFProxyTypeHTTPS as String
let sOCKS = kCFProxyTypeSOCKS as String
let fTP = kCFProxyTypeFTP as String
let autoConfigurationURL = kCFProxyTypeAutoConfigurationURL as String
let type = proxy.object(forKey: kCFProxyTypeKey as String) as? String ?? ""
var type2: String?
switch type {
case none:
type2 = "None"
break;
case hTTP:
type2 = "HTTP"
break;
case hTTPS:
type2 = "HTTPS"
break;
case sOCKS:
type2 = "SOCKS"
break;
case fTP:
type2 = "FTP"
break;
case autoConfigurationURL:
type2 = "auto"
break;
default:
type2 = "unknown"
break;
}
return ["host":host, "port":port, "type":type2 ?? ""]
}
Но она асинхронная и конфликтует с моими потребностями.