ご覧いただきありがとうございます。
質問
Laravel自身に外部(?)からのアクセスをブロックする機能がデフォルトで備わっているか?
目的
Laravel7上で作ったWebページをPDFにして出力したいというのが大きな目的です。
そのWebページではJavaScriptを使ったチャート図の生成などをしており、
サーバーサイド(PHP)でPDFのチャート図生成のハードルが高く、
chromiumによるヘッドレスブラウザにてWebページを表示、その後PDFに変換したいと考えております。
済んでいること
・chrome-php/chromeのLaravelプロジェクトへのインストール
・Webページへのアクセス処理
php
1 public function pdf() 2 { 3 $browserFactory = new BrowserFactory(); 4 5 // starts headless chrome 6 $browser = $browserFactory->createBrowser([ 7 //debugs 8 'headless' => false, // disable headless mode 9 'connectionDelay' => 0.8, // add 0.8 second of delay between each instruction sent to chrome, 10 'debugLogger' => 'php://stdout', // will enable verbose mode 11 12 //options 13 'ignoreCertificateErrors' => true, 14 ]); 15 16 // creates a new page and navigate to an url 17 $page = $browser->createPage(); 18 $url = route('question.result.html'); // 【NG】ローカルのPDF化したいページ 19 // $url = 'https://google.com'; // 【OK】外部サイト 20 // $url = 'http://localhost:8001'; // 【OK】ローカルのフレームワークなしテストページ 21 $page->navigate($url)->waitForNavigation(); 22 23 // get page title 24 $pageTitle = $page->evaluate('document.title')->getReturnValue(); 25 26 $filename = uniqid(sprintf('%02x', random_int(0, 255))); // 4e5ce3dd8d7e2de 27 // screenshot 28 $page->screenshot()->saveToFile(storage_path('/app/pdf/'.$filename.'.png')); 29 30 // pdf 31 $page->pdf(['printBackground'=>false])->saveToFile(storage_path('/app/pdf/'.$filename.'.pdf')); 32 33 // bye 34 $browser->close(); 35 36 }
困っていること
作成したプログラムから、Webページにアクセスした際の挙動に差があり、
PDF化したいページが読み込めない。
パターンとしては次のようであり、Laravel自身が何かブロックしているような挙動に感じております。
NG: ローカルのPDF化したいページ(Laravel)
OK: 外部サイト(https://google.com)
OK: ローカルのプレーンPHP(Laravelではない)
Laravel自身に、botからのアクセスやローカルホストからのアクセスを制限するような仕組みがあるのでしょうか
心当たりのある方おられましたら、アドバイスいただけると幸いです。
--追記 ご指摘いただいた点
・Laravel側にブロックしたようなログは残っておりませんでした。
単にchromiumのライブラリ(ページにアクセスする関数)が、タイムアウトを返したログのみでした
->waitForNavigation() で処理は終了したようで
[2022-06-06 15:27:29] local.ERROR: Operation timed out (30sec) {"exception":"[object] (HeadlessChromium\\Exception\\OperationTimedOut(code: 0): Operation timed out (30sec) at /Applications/XAMPP/xamppfiles/htdocs/sat/vendor/chrome-php/chrome/src/Utils.php:71)
・アクセス先のURL(route('question.result.html')の返り値): http://localhost:8000/question/result/pdf
こちらは正常で、アクセスしたいページです。