Каковы максимальные символы в строке URL, которые можно передать в функцию Puppeteer page.goto (url) - PullRequest
1 голос
/ 21 мая 2019

Фон

Мы используем Puppeteer для рендеринга PDF-файлов на Node-сервере.Мы используем API для передачи больших строк запроса в API, который передается в Puppeteer.Как только Puppeteer рендерит веб-страницу, данные в строке запроса GET вытягиваются на визуализированную HTML-страницу, поэтому данные на странице заполняются динамически.Когда страница отображается, Puppeteer преобразует ее в PDF, и она загружается на клиент.

Проблема

Мы поняли, что, когда запросы очень велики, он ломает браузер, когда мы запускаем API с GET-запросом.Чтобы преодолеть это, мы используем API как POST и хэшируем данные, чтобы их можно было обработать позже.

Это заставило нас задуматься, существует ли максимальный символ для функции кукловода, отрисовывающей веб-страницу, используемую для рендеринга PDF.

Пример кода

const browser = await puppeteer.launch({
          args: ['--no-sandbox', '--disable-setuid-sandbox'],
          ignoreHTTPSErrors: true,
          dumpio: false
        });

        const page = await browser.newPage();

        const data = reqMethod === 'POST' ? req.body : JSON.parse(req.query.data);

        const {pdfOptions, ...templateData} = data;

        const url = `${PDF_API_PROD}/${template}?data=${JSON.stringify(templateData)}`;

        await page.goto(url);

        const pdfBuffer = await page.pdf({
          format: 'A4',
          margin: {
            top: '20px',
            left: '20px',
            right: '20px',
            bottom: '20px',
          },
          ...pdfOptions,
        });

Вопрос

После просмотра кода выше вы увидите, что мы передаемОбъект данных непосредственно в URL-адрес в качестве параметра GET.Это будет использоваться для визуализации веб-страницы с помощью Puppeteer.

Как только веб-страница отображается с помощью Puppeteer, данные в строке GET будут перетаскиваться на веб-страницу с помощью JavaScript для динамического отображения страницы.

Какое максимальное количество символов можно передать в функцию Puppeteer await page.goto(url);?

1 Ответ

0 голосов
/ 21 мая 2019

В браузере нет жесткого ограничения. Я смог без проблем отправлять на сервер URL длиной до 2000000 символов. Даже после этого у меня были проблемы только потому, что отправка данных занимает некоторое время.

Если у вас возникают проблемы с отправкой больших ULR, скорее всего, это одна из следующих двух вещей:

1. Сервер неправильно настроен для получения объема данных.

Чтобы получить столько данных, вы должны правильно настроить свой сервер. По умолчанию большинство серверов ограничивают данные, которые могут быть отправлены через URL.

2. Вы сбиваете тайм-аут

Имейте в виду, что отправка нескольких МБ данных может занять некоторое время в зависимости от вашего интернет-соединения и скорости загрузки сервера. Также может быть медленнее отправлять данные в заголовок HTTP-запроса, а не отправлять их в виде потока внутри тела. В моих тестовых случаях это было ограничивающим фактором.

Следовательно: Скорее всего, проблема, с которой вы сталкиваетесь, связана не с кукловодом, а с принимающей стороной.

Что делает кукловод

Поскольку вы думаете, что кукловод может урезать URL: это не так. Puppeteer - это просто оболочка для DevTools Protocol . Puppeteer примет аргумент URL , обернет его как часть полезной нагрузки через JSON.stringify и отправит его в браузер. Я сомневаюсь, что протокол DevTools имеет какие-либо ограничения, встроенные в Page.navigate . Следовательно, здесь не должно быть никаких «специфичных для библиотеки», хотя кукловод здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...