Skip to main content

resolve_with_pac

Function resolve_with_pac 

Source
pub fn resolve_with_pac(
    config: &ProxyConfig,
    url: &Url,
    script: Option<&PacScript>,
    policy: &PacPolicy,
) -> Result<Vec<ProxyStep>, Error>
Available on crate features pac and resolve only.
Expand description

Routing decisions that may need a PAC script, behind the pac feature (off by default). Like resolve, but evaluates PAC when the mode requires it.

For ProxyMode::Direct and ProxyMode::Manual, this agrees with resolve and script is ignored. PacInline: body from script or mode. Pac: Some(script) or Error::PacFetchRequired. WpadAutoDetect: Some(script) or Error::PacNotSupported. Never downloads; hostless → Direct; no bypass in PAC modes. PacResolver adds WinHTTP, CFNetwork or Android’s PAC service for the last two when one is attached; WpadAutoDetect needs it built with_wpad(true).

§Errors

Error::PacFetchRequired, Error::PacNotSupported, pac::evaluate, and (because Direct and Manual are handed straight to resolve) Error::ProxyEntryUnusable.

use proxy_watch::pac::PacPolicy;
use proxy_watch::{Error, ProxyConfig, ProxyConfigSource, ProxyMode, Url, resolve_with_pac};

let mode = ProxyMode::pac(Url::parse("http://wpad.corp/proxy.pac").unwrap());
let config = ProxyConfig::from_source(ProxyConfigSource::Registry, mode);
let url = Url::parse("http://example.net/").unwrap();

let Error::PacFetchRequired { url: wanted } =
    resolve_with_pac(&config, &url, None, &PacPolicy::new()).unwrap_err()
else { panic!() };
assert_eq!(wanted.as_str(), "http://wpad.corp/proxy.pac");