-
Notifications
You must be signed in to change notification settings - Fork 309
Description
Hi, I am trying to use chrome-php to create PDFs from protected pages. The PDF pages are under the same security restrictions as the page that is running chrome-php.
My goal is to fetch the current PHP session ID, set that into the headers of the chrome-php request, and make the call to the PDF page using the security of the current user.
If I call $page->setCookies(...)->await(), the subsequent $page->navigate(....)->waitForNavigation() hangs the initial request and times out, but after that the call is made to the PDF page with the cookies set.
If I don't call ->await() after $page->setCookies() then $page->navigate(....)->waitForNavigation() runs as expected but the cookies are not set.
Here's the chunk of code
$browserFactory = new BrowserFactory($this->chromeBinary);
$browser = $browserFactory->createBrowser([
'noSandbox' => true,
'customFlags' => ['--remote-allow-origins=*']
]);
try {
$page = $browser->createPage();
// If we have a session, then I want to use the session cookie to authenticate chrome-php
if ($request !== null && $request->getSession() !== null) {
$session = $request->getSession();
// According to some Puppeteer docs, we need to navigate to a page first, this works.
$page->navigate($request->getSchemeAndHttpHost() . '/')->waitForNavigation();
// Now we can set the session cookie
$page->setCookies([
Cookie::create($session->getName(), $session->getId(), [
'domain' => $request->getHost(),
'expires' => time() + 3600, // 1 hour
]),
])->await();
}
// But then this hangs
$page->navigate($pdfUrl)->waitForNavigation();
// Save to a pdf
$page->pdf()->saveToFile($pdfFile);
} finally {
// bye
$browser->close();
}
Any help in working out why waitForNavigation() hangs after calling setCookies()->await() would be immensely helpful.