如何修改PHP CURL代码实现多域名多Cookie获取并展示多JSON
要实现从不同站点使用不同Cookie获取多个JSON并在同一页面展示,可以通过配置化管理站点信息+封装通用请求函数的方式实现,既避免重复代码,又提升扩展性。以下是修改后的完整代码:
<?php // 1. 定义多站点配置:每个站点包含目标URL和对应的Cookie $sites = [ [ 'url' => 'https://example.com/list', 'cookie' => 'session=example' ], [ 'url' => 'https://another-site.com/data', 'cookie' => 'auth_token=abc123; user_id=456' ], // 可继续添加更多站点配置 ]; // 2. 封装通用的CURL请求函数 function fetchJsonWithCookie(string $url, string $cookie): mixed { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, // 设置合理超时,避免无限等待 CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ "Cookie: $cookie", 'Accept: application/json' // 明确请求JSON格式,部分站点需此头 ], ]); $response = curl_exec($curl); $error = curl_error($curl); curl_close($curl); // 处理CURL请求错误 if ($error) { return [ 'url' => $url, 'status' => 'error', 'message' => "CURL Error: $error" ]; } // 校验并解析JSON响应 $jsonData = json_decode($response, true); if (json_last_error() !== JSON_ERROR_NONE) { return [ 'url' => $url, 'status' => 'invalid_json', 'raw_response' => $response ]; } return [ 'url' => $url, 'status' => 'success', 'data' => $jsonData ]; } // 3. 循环处理所有站点,收集结果 $allResults = []; foreach ($sites as $site) { $allResults[] = fetchJsonWithCookie($site['url'], $site['cookie']); } // 4. 格式化展示所有结果 echo '<pre>'; echo json_encode($allResults, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); echo '</pre>'; ?>
关键说明
- 配置化管理:所有站点的URL和Cookie集中在
$sites数组,后续添加新站点只需追加元素,无需修改核心逻辑。 - 函数封装:将重复的CURL请求逻辑封装成函数,统一处理错误和JSON解析,代码更简洁易维护。
- 错误处理:增加了CURL错误捕获、JSON格式校验,返回结果会明确标记状态,方便排查问题。
- 格式化输出:用
JSON_PRETTY_PRINT让JSON结构更清晰,适合调试查看。
注意事项
- 确保每个站点的Cookie有效,且目标站点允许你的服务器IP发起请求(部分站点有反爬或IP限制)。
- 根据实际需求调整
CURLOPT_TIMEOUT等参数,避免请求超时影响页面加载。 - 如果部分站点需要GET请求,可在配置数组中添加
method字段,在函数中动态设置CURLOPT_CUSTOMREQUEST的值。
内容的提问来源于stack exchange,提问作者world
相关产品推荐
相关产品推荐

