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

如何使用Curl携带Cookie登录站点并获取登录后的价格信息

可行解决思路
  • 首先补全CSRF令牌获取逻辑:当前绝大多数站点登录表单都带有隐藏的CSRF校验字段,直接提交账号密码会被拦截。你需要先发送GET请求到登录页面,解析响应内容提取表单中隐藏的token字段,将该字段和账号密码一同作为POST参数提交。
  • 校验表单提交字段名:使用浏览器F12开发者工具的「网络」面板,查看浏览器正常登录时的POST请求参数,确认字段名是否真为username和password,部分站点会使用email、user_account、pwd等自定义字段名,字段不匹配会直接触发账号密码错误提示。
  • 修正Referer配置:你当前设置的CURLOPT_REFERER值为$_SERVER['REQUEST_URI'],指向的是你本地脚本的地址,不符合站点的同源校验要求,需要改为登录页地址https://apollohousewares.co.uk/members/login/。
  • 替换过时的User-Agent:你当前使用的是Firefox 1.0版本的UA,过于老旧会被站点直接识别为爬虫拦截,替换为你当前本地浏览器的UA即可。
  • 开启自动跳转配置:将CURLOPT_FOLLOWLOCATION设置为1,登录成功后站点通常会返回302跳转,禁止跳转无法正常获取登录后的会话状态。
  • 修正Cookie配置:
    • 删除手动设置CURLOPT_COOKIE的代码行,手动指定cookie值会覆盖站点下发的有效会话cookie
    • 新增CURLOPT_COOKIEFILE配置,值和CURLOPT_COOKIEJAR一致,第二次请求会员页时才会读取之前存储的登录cookie
  • 新增错误校验逻辑:每次curl_exec执行后打印返回值和HTTP状态码(使用curl_getinfo($ch, CURLINFO_HTTP_CODE)获取),方便定位是参数错误还是被站点拦截。
修改后参考代码
// 账号密码配置
$username = '你的实际账号';
$password = '你的实际密码';
$loginUrl = "https://apollohousewares.co.uk/members/login/";
$targetUrl = "https://apollohousewares.co.uk/members/customers/target/home/";
$cookie_file_path = "cookie.txt";

$ch = curl_init();
// 基础配置
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
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_REFERER, $loginUrl);
// Cookie配置
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);

// 第一步:GET登录页获取CSRF令牌
$loginPage = curl_exec($ch);
// 这里需要你根据实际表单结构解析隐藏token,示例假设隐藏字段名为csrf_token
preg_match('/<input type="hidden" name="csrf_token" value="(.*?)"/', $loginPage, $matches);
$csrfToken = $matches[1] ?? '';

// 第二步:提交登录POST请求
$postData = [
    'username' => $username,
    'password' => $password,
    'csrf_token' => $csrfToken // 替换为实际的token字段名
];
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
$loginRes = curl_exec($ch);

// 第三步:访问目标会员页
curl_setopt($ch, CURLOPT_URL, $targetUrl);
$targetHtml = curl_exec($ch);
echo $targetHtml;

curl_close($ch);

注意:上述代码中的CSRF字段名需要你根据站点实际的表单结构调整,以浏览器实际抓包的字段为准。

内容的提问来源于stack exchange,提问作者Shashi Bhushan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:01