You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL请求eldorado.ua仅返回iframe 如何获取完整页面内容

问题原因

你收到的返回是目标站部署的Incapsula(Imperva)反爬虫防护的拦截页面,这类防护会校验请求的合法性,验证通过才会返回实际页面内容。同时你的代码存在基础错误,进一步降低了请求的合法性:

  • 变量名不一致:你初始化的curl句柄是$curl,但配置Cookie的两行代码操作的是$ch,导致Cookie完全未生效,无法携带服务端下发的验证凭据
  • 请求头配置不完整,和真实浏览器请求差异大,很容易被反爬规则识别
  • 原生curl无法执行页面内的JS验证逻辑,无法自动完成反爬校验

修复步骤

1. 修正基础代码错误

首先修正Cookie配置的变量错误,同时补充完整请求头配置:

// 提前定义可写的Cookie存储路径
$cookies = __DIR__ . '/eldorado_cookie.txt';
$curl = curl_init();
$url = "https://eldorado.ua/smartfon-samsung-galaxy-a52-8256-gb-black-sm-a525-fzkisek-/p71321565/";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true); // 开启自动设置Referer,更接近真实请求
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);

curl_setopt(
        $curl,
        CURLOPT_USERAGENT,
        // 建议换成更新的浏览器UA,旧版Chrome UA更容易被拦截
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
);

// 修正变量名错误
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

// 新增请求头配置,模拟真实浏览器请求
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
    'Sec-Ch-Ua: "Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"',
    'Sec-Ch-Ua-Mobile: ?0',
    'Sec-Ch-Ua-Platform: "Windows"',
    'Sec-Fetch-Dest: document',
    'Sec-Fetch-Mode: navigate',
    'Sec-Fetch-Site: none',
    'Sec-Fetch-User: ?1',
    'Upgrade-Insecure-Requests: 1'
]);
// 开启自动解压缩,处理gzip/brotli压缩的返回内容
curl_setopt($curl, CURLOPT_ENCODING, '');

$content = curl_exec($curl);
var_dump(curl_error($curl));
curl_close($curl);

2. 处理JS验证

如果修改后还是返回拦截页面,说明需要执行页面的JS验证逻辑才能通过校验,原生curl不支持JS执行,可选择以下方案:

  • 方案1:更换为无头浏览器工具发起请求,比如PHP的php-webdriver调用Chrome无头模式、或者使用Panther这类封装好的无头浏览器库,工具会自动执行页面JS完成验证,等待页面加载完成后再提取内容
  • 方案2:先在本地浏览器正常访问目标页面,通过开发者工具复制浏览器中该站点的完整Cookie,写入到你的curl请求头中,可临时通过验证(Cookie有效期根据站点规则而定)

内容的提问来源于stack exchange,提问作者Артем Паламарчук

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:04