Libproxy.ProxyFactory.get_proxies

### Method

# Libproxy ProxyFactoryget_proxies

#### Declaration [src]

    char**
    px_proxy_factory_get_proxies (
      pxProxyFactory* self,
      const char* url
    )

#### Description [src]

Get which proxies to use for the specified `URL`.

A `NULL`-terminated array of proxy strings is returned. If the first proxy fails, the second should be tried, etc… Don’t forget to free the strings/array when you are done. If an unrecoverable error occurs, this function returns `NULL`.

Regarding performance: this method always blocks and may be called in a separate thread (is thread-safe). In most cases, the time required to complete this function call is simply the time required to read the configuration (i.e. from gconf, kconfig, etc).

In the case of PAC, if no valid PAC is found in the cache (i.e. configuration has changed, cache is invalid, etc), the PAC file is downloaded and inserted into the cache. This is the most expensive operation as the PAC is retrieved over the network. Once a PAC exists in the cache, it is merely a javascript invocation to evaluate the PAC. One should note that DNS can be called from within a PAC during javascript invocation.

In the case of WPAD, WPAD is used to automatically locate a PAC on the network. Currently, we only use DNS for this, but other methods may be implemented in the future. Once the PAC is located, normal PAC performance (described above) applies.

The format of the returned proxy strings are as follows:

- http://[username:password@]proxy:port

- socks://[username:password@]proxy:port

- socks5://[username:password@]proxy:port

- socks4://[username:password@]proxy:port

- ://[username:password@]proxy:port

- direct://

Please note that the username and password in the above URLs are optional and should be use to authenticate the connection if present.

For SOCKS proxies, when the protocol version is specified (socks4:// or socks5://), it is expected that only this version is used. When only socks:// is set, the client MUST try SOCKS version 5 protocol and, on connection failure, fallback to SOCKS version 4.

Other proxying protocols may exist. It is expected that the returned configuration scheme shall match the network service name of the proxy protocol or the service name of the protocol being proxied if the previous does not exist. As an example, on Mac OS X you can configure a RTSP streaming proxy. The expected returned configuration would be:

- rtsp://[username:password@]proxy:port

To free the returned value, call `px_proxy_factory_free_proxies`.

#### Parameters

`url`

  Type: `const char*`

  Get proxxies for specificed URL.

  The data is owned by the caller of the method.
  The value is a NUL terminated UTF-8 string.

#### Return value

Type: An array of `utf8`

A list of proxies.

The array is `NULL`-terminated.
The caller of the method takes ownership of the returned data, and is responsible for freeing it.
Each element is a NUL terminated UTF-8 string.