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

使用Doppio转换受密码保护HTML为PDF失败,求助Cookie认证方法

解决Doppio API转换认证页面为PDF的Cookie获取与使用问题

为什么authenticate参数无效?

你的目标站点是通过页面重定向到登录表单完成认证,而非HTTP基础认证(弹出浏览器自带的登录框),所以Doppio的authenticate参数不适用,必须用Cookie认证方式。

步骤1:找到目标站点的认证Cookie名称

  1. 打开浏览器,手动访问并登录你的目标站点(https://example.com/admin/property)
  2. 按下F12打开开发者工具,切换到Application(Chrome)或存储(Firefox)标签
  3. 在左侧菜单找到Cookies -> 你的站点域名(比如example.com)
  4. 查看登录后新增的Cookie条目,通常名称类似:session_id、auth_token、user_session、laravel_session(如果是Laravel框架)等,这些就是维持登录状态的关键Cookie。

步骤2:通过代码获取认证Cookie并传给Doppio API

你需要先模拟登录目标站点,拿到有效Cookie,再将Cookie注入Doppio的请求中:

// 1. 先模拟登录目标站点,获取认证Cookie
$loginClient = new \GuzzleHttp\Client(['cookies' => true]);

// 先获取登录页面的CSRF令牌(如果站点需要)
$loginPageResponse = $loginClient->get('https://example.com/login');
$loginPageContent = (string)$loginPageResponse->getBody();
// 用正则匹配CSRF令牌,根据实际站点的表单字段调整
preg_match('/<input type="hidden" name="_token" value="(.*?)"/', $loginPageContent, $matches);
$csrfToken = $matches[1] ?? '';

// 发送登录请求
$loginClient->post('https://example.com/login', [
    'form_params' => [
        'email' => 'user@domain.com', // 注意:实际站点的表单字段可能是username,需调整
        'password' => 'password',
        '_token' => $csrfToken // 如果站点需要CSRF的话
    ]
]);

// 获取登录后的CookieJar
$cookieJar = $loginClient->getConfig('cookies');
// 转换为Doppio需要的键值对格式
$cookies = [];
foreach ($cookieJar as $cookie) {
    $cookies[$cookie->getName()] = $cookie->getValue();
}

// 2. 调用Doppio API,传入Cookie
$doppioClient = new \GuzzleHttp\Client();
$response = $doppioClient->post('https://api.doppio.sh/v1/render/pdf/sync', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer apikey',
        'Content-Type' => 'application/json'
    ],
    'json' => [
        'page' => [
            "pdf" => [
                "printBackground" => true
            ],
            "goto" => [
                "url" => 'https://example.com/admin/property'
            ],
            "cookies" => $cookies // 注入认证Cookie
        ]
    ]
]);

$responseBody = $response->getBody();

注意事项

  • 登录请求的form_params要和目标站点的登录表单字段完全匹配,比如有些站点用username而非email,需要查看登录页的HTML源码确认。
  • 如果站点有验证码或其他风控机制,可能需要额外处理。
  • Cookie可能有过期时间,建议每次请求Doppio前都重新获取一次有效Cookie。

内容的提问来源于stack exchange,提问作者Aayush Dahal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:35:17