ERR_BLOCKED_BY_ORB 与木偶操纵者

问题描述 投票:0回答:1

我正在开发 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" / 不起作用

node.js request cors puppeteer
1个回答
0
投票

对于那些最终到达这里的人,因为这是 ERR_BLOCKED_BY_ORB 的少数结果之一:在我们的例子中,这是一个 API 调用,应该回复一个看起来像 JavaScript 文件的响应,但 Redis 抛出了一个错误,因此在发送有关即将发生的错误的 JSON 响应。由于它没有像调用所期望的那样作为 JS 文件进行回复,因此它在 ORB 错误下阻塞了它。

检查以确保响应符合您的想法。在我们意识到发生了什么之前,我们必须在单独的窗口中打开 API 调用,以使其向我们显示实际响应。

© www.soinside.com 2019 - 2024. All rights reserved.