Как получить настройки прокси системы мобильного телефона по языку Dart? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу получить настройки прокси системы мобильного телефона на платформе 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 ?? ""]
    }

Но она асинхронная и конфликтует с моими потребностями.

...