我正在开发 Express JS API,用于将 base64 HTML 转换为 PDF。
我使用 Puppeteer 进行此转换。在 HTML 代码中,有一个托管在需要身份验证的专用服务器上的图像。 我在尝试从此第三方服务器检索图像时遇到问题。 在 Chromium 的“headless: false”模式下,我收到以下错误:
**“无法加载资源:net::ERR_BLOCKED_BY_ORB。” **
请注意,Cookie 存在于 Chromium 中。
(我在加载 Google 字体时也遇到了 CORS 政策问题。)
我的错误在这里:
→ 我的木偶代码:
export class PdfManager {
async convertToPdf({ content, jwtToken }: HtmlToPdfTypes) {
const cookie = [
{
name: "user",
value: jwtToken,
domain: ".mysubdomain.domain.com",
httpOnly: false,
secure: false,
hostOnly: false,
},
];
const browser = await puppeteer.launch({
headless: false,
args: [
// "--disable-web-security",
"--no-sandbox",
],
});
const page = await browser.newPage();
await page.setCookie(...cookie);
const htmlContent = Buffer.from(content, "base64").toString();
await page.setContent(htmlContent);
const pdf = await page.pdf({
format: "A4",
printBackground: true,
});
// await browser.close();
return pdf;
}
}
→ 我的app.ts代码:
const app = express();
app.use(bodyParser.json({ limit: "10mb" }));
app.use(
bodyParser.urlencoded({
extended: true,
limit: "10mb",
parameterLimit: 50000,
})
);
app.use(express.json());
app.use(
cors({
credentials: true,
origin: process.env.FRONTEND_URL,
optionsSuccessStatus: 200,
})
);
app.use(router);
app.use(express.static(path.join(__dirname, "../public")));
export default app;
我尝试过添加头盔,但情况并没有改善。我还尝试使用“--disable-web-security”和
puppeteer.launch
进行测试,但收到 403 错误。
我在本地进行测试,图像存储在 Java/spring 服务器上。
感谢您的回复。
-我尝试添加头盔依赖项/没有收到任何结果。 -我尝试禁用 Chromium 中的网络安全/收到“无法加载资源:服务器响应状态为 403 ()”。 -我尝试在我的标签中使用 crossorigin="anonymous" / 不起作用
对于那些最终到达这里的人,因为这是 ERR_BLOCKED_BY_ORB 的少数结果之一:在我们的例子中,这是一个 API 调用,应该回复一个看起来像 JavaScript 文件的响应,但 Redis 抛出了一个错误,因此在发送有关即将发生的错误的 JSON 响应。由于它没有像调用所期望的那样作为 JS 文件进行回复,因此它在 ORB 错误下阻塞了它。
检查以确保响应符合您的想法。在我们意识到发生了什么之前,我们必须在单独的窗口中打开 API 调用,以使其向我们显示实际响应。