Генерация PDF-файла с помощью PuppeteerSharp с веб-страницы, содержащей изображения, связанные с хранилищем больших двоичных объектов Azure

#c# #pdf-generation #puppeteer-sharp

#c# #pdf-генерация #puppeteer-sharp

Вопрос:

У меня есть веб-страница, которая содержит теги href, указывающие на изображения, хранящиеся в хранилище больших двоичных объектов Azure. Контейнер Azure является частным, и ссылка, сгенерированная для доступа к каждому изображению, выполняется с использованием токена Azure SAS.Формат ссылки href похож на https://myblob.blob.core.windows.net/mycontainer/myfolder/myfile.jpeg?sv=2019-12-12amp;st=2020-10-13T18:52:48Zamp;se=2020-10-13T18:58:48Zamp;sr=bamp;sp=ramp;sig=P5JRdwKa4GkbIFF55sWywOe4vnPnWOCoSf29UHYmNPA=

При создании PDF-файла с помощью Puppeteer sharp с использованием WaitUntilNavigation.Networkidle0, мне не удалось получить изображения: введите описание изображения здесь

Я также протестировал каждую сгенерированную защищенную ссылку SAS, и они работают без проблем. Я также заменил каждую ссылку href на изображение с кодировкой данных base 64, и оно отлично работает.

Я протестировал генерацию PDF с использованием онлайн-службы Puppeteer на основе Nodejs (https://try-puppeteer.appspot.com /) и это работает как заклинание. Похоже, возникла проблема с версией puppeteersharp (v2.0.4).

Есть идеи, в чем может быть проблема?

Комментарии:

1. Бьюсь об заклад, вы бы получили такую же навигацию по этой странице с помощью стандартного браузера.

2. На самом деле, если я подключаюсь к странице с помощью встроенного браузера телефона Samsung S20, это работает, я вижу все картинки.

Ответ №1:

После нескольких часов борьбы с проблемой мы, наконец, обнаружили проблему. Это связано не с Puppeteer, который работает как шарм, а скорее с тем, как частный контейнер для хранения больших двоичных объектов обрабатывает аутентификацию: поскольку наш запрос содержал HTTP-заголовок авторизации с токеном на предъявителя, требуемый нашим собственным приложением, этот заголовок был отправлен Chromium при получении удаленных изображений из контейнера больших двоичных объектов. К сожалению, служба Azure попыталась обработать этот токен и отклонила наш запрос.

Как мы это определили? Подключив отладчик chrome к экземпляру Chromium и проверив журналы. Действительно, можно запустить Puppeteer с удаленного порта отладки.