Pregunta Mac OSX: ¿cómo puedo tomar la configuración del proxy utilizando Cocoa o incluso funciones C puras?


Me he dado cuenta de que mi aplicación no usa la configuración de proxy disponible para la máquina (estoy usando la Charles Proxy para probar la configuración del proxy). Una parte de la aplicación que hace llamadas usando NSURLConnection usa correctamente y realiza solicitudes usando el proxy, la otra parte de la aplicación (que es una aplicación MonoMac, que se ejecuta en Mono, obviamente) no lo hace.

Sigue haciendo peticiones como si no hubiera un proxy configurado. ¿Hay alguna función u objeto que pueda usar para capturar la misma configuración de proxy que NSURLConnection está usando?


5
2017-11-07 18:50


origen


Respuestas:


La función que le da toda la información del proxy es SCDynamicStoreCopyProxies (), se puede llamar como en el siguiente ejemplo (una vez que haya terminado, también tiene que CFRelease todos estos objetos, ya que son todos de objetos CF y no directamente de Cocoa):

#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>

int main(int argc, const char * argv[])
{

  @autoreleasepool {

    CFDictionaryRef proxies = SCDynamicStoreCopyProxies(NULL);

    CFIndex count = CFDictionaryGetCount(proxies);

    NSLog(@"Number of keys is %ld", count);

    NSDictionary * proxyConfiguration = (NSDictionary*) proxies;

    for ( id key in proxyConfiguration.keyEnumerator ) {
      NSLog(@"Pair is %@ -> %@", key, [proxyConfiguration valueForKey: key]);
    }

  }
    return 0;
}

Y la salida será algo así como:

2012-11-07 16:33:57.844 network-test[6501:403] Number of keys is 12
2012-11-07 16:33:57.847 network-test[6501:403] Pair is HTTPEnable -> 1
2012-11-07 16:33:57.848 network-test[6501:403] Pair is HTTPSProxy -> 127.0.0.1
2012-11-07 16:33:57.848 network-test[6501:403] Pair is ExceptionsList -> (
    "www.google.com"
)
2012-11-07 16:33:57.849 network-test[6501:403] Pair is HTTPSPort -> 8888
2012-11-07 16:33:57.850 network-test[6501:403] Pair is __SCOPED__ -> {
    en1 =     {
        ExceptionsList =         (
            "www.google.com"
        );
        FTPPassive = 1;
        HTTPEnable = 1;
        HTTPPort = 8888;
        HTTPProxy = "127.0.0.1";
        HTTPSEnable = 1;
        HTTPSPort = 8888;
        HTTPSProxy = "127.0.0.1";
        SOCKSEnable = 1;
        SOCKSPort = 8889;
        SOCKSProxy = "127.0.0.1";
    };
}
2012-11-07 16:33:57.850 network-test[6501:403] Pair is HTTPProxy -> 127.0.0.1
2012-11-07 16:33:57.851 network-test[6501:403] Pair is SOCKSPort -> 8889
2012-11-07 16:33:57.852 network-test[6501:403] Pair is SOCKSProxy -> 127.0.0.1
2012-11-07 16:33:57.852 network-test[6501:403] Pair is HTTPSEnable -> 1
2012-11-07 16:33:57.853 network-test[6501:403] Pair is SOCKSEnable -> 1
2012-11-07 16:33:57.853 network-test[6501:403] Pair is HTTPPort -> 8888
2012-11-07 16:33:57.854 network-test[6501:403] Pair is FTPPassive -> 1

10
2017-11-07 22:04



los Proxies Diccionario en Configuración del sistema marco contendría esta información


1
2017-11-07 19:00