CFNetworkCopyProxiesForURL Not returning valid proxies for URL

Hi all

I am experiencing some odd behavior when I use CFNetworkCopyProxiesForURL. Namely, it works perfectly for unauthenticated http/https and auto configure (proxy.pac) files, but it seems to assume that credentialed proxies are not valid for the the given URL, returning a result of kCFProxyTypeNone whenever I attempt to use a credentialed proxy. If it instead use SCDynamicStoreCopyProxies to get the system proxies and use the first one found, it works correctly to proxy my connection to the destination, but I would rather use CFNetworkCopyProxiesForURL if possible as that would be more specific.

(lldb) n
Process 2789 stopped
* thread #61, queue = 'com.apple.root.default-qos', stop reason = step over
  frame #0: 0x00000002f858e868 myprocess.dylib`get_proxy_settings_for_url(uri=0x0000600000c40010) at my_proxy.mm:315:33
   312 	  // We have to use a unique ptr type here because of the COPY in the function name, which tells us we take ownership
   313 	  auto proxies = apple::cf_ptr<CFArrayRef>{ CFNetworkCopyProxiesForURL(target_uri_ref.get(),
   314 	                                     system_proxies.get()) };
-> 315 	  if (CFArrayGetCount(proxies.get()) == 0 )
   316 	  {
   317 	    LOG_INFO("No proxy configuration found"_ts);
   318 	    return std::nullopt;
Target 0: (myprocess) stopped.
(lldb) po proxies.get()
<__NSArrayM 0x600000c16130>(
{
  kCFProxyTypeKey = kCFProxyTypeNone;
}
)

(lldb) po system_proxies.get()
{
  ExceptionsList =   (
    "192.168.1.61"
  );
  HTTPEnable = 1;
  HTTPPort = 3128;
  HTTPProxy = "192.168.1.61";
  HTTPUser = mike;
  "__SCOPED__" =   {
    en0 =     {
      ExceptionsList =       (
        "192.168.1.61"
      );
      HTTPEnable = 1;
      HTTPPort = 3128;
      HTTPProxy = "192.168.1.61";
      HTTPUser = mike;
    };
  };
}

(lldb) po target_uri_ref.get()
https://mycompany.com/mac

Thanks! Alex

Yeah, something is inconsistent here about the way CFNetwork is reading the proxy settings for a URL and how the system has set their proxy settings. My first inclination would be to checkout how the system has configured the proxy and try to resolve any differences.

One thing to note also is that as of iOS 15 and macOS 12, HTTP proxies are deprecated so you may be running into issues there too. Does the same thing happen with a proxy configured for HTTPS?

Matt Eaton
DTS Engineering, CoreOS
meaton3@apple.com
CFNetworkCopyProxiesForURL Not returning valid proxies for URL
 
 
Q