在维护 CFStream 代码的应用中,应按所配置流的类型来选择代理属性。HTTP 请求流具备普通套接字流仅凭其属性字典无法获得的协议处理能力。

所构建的连接文档记载的配置
通过 HTTP 代理的 HTTP CFStreamkCFStreamPropertyHTTPProxy
通过 SOCKS 代理的 CFStreamkCFStreamPropertySOCKSProxy

Apple 明确将 HTTP 属性描述为配置 HTTP CFStream。此类流可由 CFHTTPMessage 请求通过 CFReadStreamCreateForHTTPRequest 创建。打开该流即会序列化并发送 HTTP 请求。

SOCKS 属性接收一个 CFDictionary,其中至少包含 SOCKS 代理的主机与端口键。它是对应于 CFStream 上 SOCKS 处理的公开属性。对于允许的、无需代理凭据的公开 TCP 测试,SOCKS 代理列表为该字典提供候选主机与端口值。请与流所支持的协议相匹配,并验证对实际目标与端口的访问。

在打开流之前应用所选属性,并检查设置属性调用的布尔结果。属性被拒绝可能表明流或值不支持所请求的配置。

若要通过 HTTP 代理传输任意 TCP 流量,请使用执行所需 CONNECT 协商的连接器。该协商属于协议层工作;仅向代理地址创建一个原始流并未完成该协商。

相关文章