# 启动会话时配置浏览器代理
浏览器代理用于在浏览器会话中配置代理服务器，使浏览器通过指定的代理服务器访问外部网络。该功能适用于以下场景：
- 企业内网访问：Agent需要通过企业代理服务器访问内部知识库或业务系统。
- 安全合规要求：租户要求所有浏览器流量必须经过指定的安全代理进行审计和过滤。
- 网络隔离环境：浏览器沙箱处于隔离网络中，需通过代理访问互联网。
#### 约束与限制
- 每个会话最多可配置5个代理。
- 每个代理最多支持100个域名模式。
- Bypass模式使用操作系统原生代理绕过列表，最多支持配置100条域名、IP地址规则。
- 仅支持HTTP/HTTPS/SOCKS5三种代理协议。
- 代理配置在会话创建后不可变，如需修改代理配置，需重新创建会话。
 
#### 配置方式
浏览器代理在创建会话时配置，创建后不可修改。如需修改代理配置，需终止当前会话并重新创建。
在 browser_session 中通过 proxies 和 bypass_patterns 参数传入代理配置。
```
from agentarts.sdk.tools import Browser
# 创建浏览器客户端
client = Browser(region="cn-southwest-2", auth_type="API_KEY", verify_ssl=False)
# 配置单个默认代理，并设置 bypass 直连域名
proxy_configuration = {
    "proxies": [
        {
            "server": "proxy.example.com",  # 代理服务器地址
            "port": 8080,                     # 代理服务器端口
            "type": "http"                    # 代理类型：http / https / socks5
        }
    ],
    "bypass": {
        "domain_patterns": ["localhost", "127.0.0.1"]  # 这些域名直连，不走代理
    }
}
# 启动会话并加载代理配置
client.start_session(
    browser_name="your_browser_name",
    session_name="your_session_name",
    api_key="your_api_key",
    proxy_configuration=proxy_configuration
)
```
#### 配置示例
**场景一：单代理配置**
企业内网有一个代理服务器，Agent 需要通过该代理访问所有外部网站，但本地地址不走代理。
```
proxy_configuration = {
    "proxies": [
        {
            "server": "proxy.example.com",  # 代理服务器地址
            "port": 8080,                     # 代理服务器端口
            "type": "http"                    # 代理类型：http / https / socks5
        }
    ],
    "bypass": {
        "domain_patterns": ["localhost", "127.0.0.1"]  # 这些域名直连，不走代理
    }
}
```
**场景二：多代理配置**
为不同域名指定不同代理，未命中域名模式的请求走默认代理，同时配置 bypass 直连域名。
```
# 配置多代理域名路由 + bypass 直连
proxy_configuration = {
    "proxies": [
        {
            "server": "proxy-a.example.com",  # 代理服务器地址
            "port": 8080,                       # 代理服务器端口
            "type": "http",                     # 代理类型
            "domain_patterns": ["example.com", ".example.com"]  # 匹配 example.com 及其子域名
        },
        {
            "server": "proxy-b.example.com",  # 代理服务器地址
            "port": 1080,                       # 代理服务器端口
            "type": "socks5",                   # 代理类型
            "domain_patterns": ["internal.corp", ".internal.corp"]  # 匹配 internal.corp 及其子域名
        },
        {
            "server": "proxy-default.example.com",  # 默认代理（无 domain_patterns）
            "port": 8080,                             # 代理服务器端口
            "type": "http"                            # 代理类型
        }
    ],
    "bypass": {
        "domain_patterns": ["localhost", "127.0.0.1", ".local"]  # 这些域名直连，不走任何代理
    }
}
```
**场景三：需要认证的代理**
代理服务器需要用户名密码认证时，通过credential_id引用平台密钥管理服务中预存的凭据。
```
proxy_configuration = {
    "proxies": [
        {
            "server": "auth-proxy.example.com",  # 代理服务器地址
            "port": 8443,                          # 代理服务器端口
            "type": "https",                       # 代理类型
            "credential_id": "your_credential_id"  # 凭据 ID，引用平台密钥管理服务中的凭据，不明文传递用户名密码
        }
    ],
    "bypass": {
        "domain_patterns": ["localhost", "127.0.0.1"]  # 这些域名直连，不走代理
    }
}
```
