PHP cURL无法获取目标页面,返回Cookie设置页求助
问题分析与解决方案
核心问题
- 错误的请求方式:你用
POST请求提交了不必要的表单数据,但目标页面是通过GET访问的,这会导致服务器返回异常的Cookie设置页面。 - Cookie授权未处理:该网站有Cookie同意机制,必须先完成Cookie授权请求,获取有效Cookie后才能正常访问目标页面。
修正后的代码
<?php // Cookie存储文件路径 $cookie_jar = "cookies.txt"; // 网站Cookie同意接口(可通过浏览器开发者工具确认实际地址和参数) $cookie_consent_url = "https://arbetsformedlingen.se/platsbanken/api/cookie-consent"; // 目标职位页面地址 $target_url = "https://arbetsformedlingen.se/platsbanken/annonser/26981350"; // 第一步:发送Cookie同意请求,获取有效授权Cookie $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $cookie_consent_url); curl_setopt($ch, CURLOPT_USERAGENT, "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($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); // 提交Cookie同意参数(模拟用户选择"同意所有Cookie") curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'consent' => 'all', 'version' => '2' ])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded', 'Accept: application/json' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch); // 第二步:使用授权Cookie访问目标页面 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $target_url); curl_setopt($ch, CURLOPT_USERAGENT, "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($ch, CURLOPT_COOKIEFILE, $cookie_jar); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 添加模拟浏览器的请求头,避免被反爬拦截 curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.5,en;q=0.3', 'Connection: keep-alive', 'Upgrade-Insecure-Requests: 1' ]); $content = curl_exec($ch); // 捕获curl请求错误 if(curl_errno($ch)) { echo '请求错误: ' . curl_error($ch); } curl_close($ch); echo $content; ?>
关键说明
- Cookie同意接口:如果代码中的Cookie同意地址或参数无效,可通过浏览器F12开发者工具,查看用户点击"同意Cookie"时发送的实际请求,替换对应参数和地址。
- 请求头模拟:补充完整的请求头,让请求更接近真实浏览器行为,降低被反爬机制识别的概率。
- 请求方式修正:目标页面使用
GET请求,去除原代码中不必要的POST和表单数据。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

