CFStream 代理属性取决于流类型
在现有 CFStream 应用中,根据流所支持的协议选择 HTTP 或 SOCKS 属性。
在维护 CFStream 代码的应用中,应按所配置流的类型来选择代理属性。HTTP 请求流具备普通套接字流仅凭其属性字典无法获得的协议处理能力。
| 所构建的连接 | 文档记载的配置 |
|---|---|
| 通过 HTTP 代理的 HTTP CFStream | kCFStreamPropertyHTTPProxy |
| 通过 SOCKS 代理的 CFStream | kCFStreamPropertySOCKSProxy |
Apple 明确将 HTTP 属性描述为配置 HTTP CFStream。此类流可由 CFHTTPMessage 请求通过 CFReadStreamCreateForHTTPRequest 创建。打开该流即会序列化并发送 HTTP 请求。
SOCKS 属性接收一个 CFDictionary,其中至少包含 SOCKS 代理的主机与端口键。它是对应于 CFStream 上 SOCKS 处理的公开属性。对于允许的、无需代理凭据的公开 TCP 测试,SOCKS 代理列表为该字典提供候选主机与端口值。请与流所支持的协议相匹配,并验证对实际目标与端口的访问。
在打开流之前应用所选属性,并检查设置属性调用的布尔结果。属性被拒绝可能表明流或值不支持所请求的配置。
若要通过 HTTP 代理传输任意 TCP 流量,请使用执行所需 CONNECT 协商的连接器。该协商属于协议层工作;仅向代理地址创建一个原始流并未完成该协商。