1 -> 概述:为何需要 PAC 脚本?
在复杂的网络环境中,直接配置一个固定的代理服务器往往不够灵活。例如,企业内部应用可能需要通过代理访问外网,但访问内部服务器时则希望直连;或者,我们需要根据访问的目标地址(IP 或域名)动态选择不同的代理。
PAC(Proxy Auto-Config,代理自动配置) 脚本正是为了解决这一问题而生。它本质上是一个用 JavaScript 编写的函数,运行在客户端。当应用程序需要访问某个 URL 时,系统会自动执行这个 PAC 脚本,脚本根据 URL(如主机名、IP 段、协议等)动态返回代理服务器地址,或是直接连接("DIRECT")。
鸿蒙系统(以 API 12 即 HarmonyOS 6.0 为基准)提供了强大的网络管理能力,其中 connection.setPacFileUrl 接口允许开发者轻松地为应用或系统设置 PAC 脚本的 URL 地址,从而实现精细化的网络访问控制。
2 -> 核心接口:设置 PAC 脚本 URL
在鸿蒙的网络连接管理模块 (@ohos.net.connection) 中,setPacFileUrl 是一个关键的 API。它允许开发者指定一个 PAC 文件的网络地址(例如 http://your-proxy-server/proxy.pac),系统会自动获取并解析该脚本,然后将其应用于后续的网络请求。
2.1 -> 接口定义与参数
- 模块:
import { connection } from '@kit.NetworkKit'; - 接口:
connection.setPacFileUrl(url: string, callback: AsyncCallback<void>): void; - 参数:
url: string 类型,指定 PAC 脚本文件的 URL。这个 URL 可以是http://或https://协议。callback: AsyncCallback 类型,异步回调,用于通知设置操作的成功或失败。
这个接口的设计非常简洁,将复杂的 PAC 脚本获取、解析和应用逻辑封装在了系统底层。开发者只需要提供一个可靠的 PAC 文件地址即可。
3 -> 深入解析:PAC 脚本如何工作?
要充分利用这个功能,理解 PAC 脚本本身至关重要。系统获取到 PAC 文件后,会执行其中定义的 FindProxyForURL(url, host) 函数。
3.1 -> PAC 脚本的核心函数
每个 PAC 文件必须包含以下函数:
// 这是 PAC 脚本的入口函数,由系统调用
// url: 应用程序试图访问的完整 URL,如 "http://www.example.com/index.html"
// host: 从 URL 中提取的主机名,如 "www.example.com"
function FindProxyForURL(url, host) {
// ... 具体的判断逻辑 ...
// 返回值示例:
// return "PROXY proxy.example.com:8080; DIRECT";
}
函数返回值是一个字符串,告诉浏览器或应用该使用哪个代理。可以包含多个选项,用分号分隔,系统会从左到右尝试连接,直到成功为止。
3.2 -> 返回值类型详解
DIRECT: 不经过任何代理,直接连接。


