承载请求的是代理。决定客户端发送哪些目标 Cookie 的是 PHP cURL 的 Cookie 引擎。两者都要配置在执行传输的句柄上。当这类工作负载可以使用公共中转时,HTTP 代理列表会为路由提供候选:

curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_COOKIEFILE, '');

COOKIEFILE 取空值会启用 Cookie 引擎,而不加载初始 Cookie 文件。该句柄上的后续请求就能发送从目标站点收到的匹配 Cookie。

要在分别创建的句柄或进程之间保持状态,请使用有明确意图的 Cookie 文件策略。COOKIEFILE 读取 Cookie;COOKIEJAR 写出 libcurl 保留的 Cookie。给 COOKIEJAR 一个路径并不意味着它也会被读取。

按应用预期的会话或账号把 Cookie 文件分开保存。并发任务共用的文件可能把状态混在一起,与每个任务选择哪个代理无关。请保护该文件,因为会话 Cookie 即使没有标为密码,也能授予访问权限。

如果工作流需要在清理前把当前 Cookie 状态落盘,请查阅 libcurl 文档中的 Cookie 命令。不要把过时 PHP 示例里的 curl_close 调用当作状态何时写出的唯一解释。

代理 IP 变化后,除非应用改动,Cookie 策略保持不变。被拒绝的会话应按目标站点的响应来诊断,而不是假定代理必须记住登录。

相关文章