lolrofl01,
1. headless браузеры это реальный браузер просто без реальной отрисовки на экране.
2. вы можете взять селеноид - все возможные браузеры в докере. Но вообще стоит искать сборку которая прячет информацию о том что браузер запущен в режиме автоматизации, потому что некоторые по ней блочат обращения к сайту - например Imperva Incapsula
teimur, ну ничего странного. если зайти в App\Http\Kernel и посмотреть middleware на группу web и группу api разница будет заметно. У последнего не будет \Illuminate\Session\Middleware\StartSession::class, \App\Http\Middleware\VerifyCsrfToken::class, а они и отвечают за сессии и csrf токен.
Так же если одновремнно открыть документацию и тот же Kernel можно узнать как выставлять приоритеты у миддлеваре такие как вы захотите
Александр, уффф. теперь понятнее. в принципе конечно для проверки isset($savedItemsIds['shikimori_id'][$item->shikimori_id]); вам вполне хватит конструкции
teimur,
1. Сделать еще один мидлеваре которые навесить и в нем гвоздями прибить заголовок
$request->headers->set('Accept', 'application/json');
2. можно хоть в nginx править этот заголовок по определенному урлу.
3. много чего можно наколхозить........
teimur, можно посмотреть как вы навесили? ну и на самом деле ларавелка вам ответ unauthenticated выдаст в json - стоит только сказать в заголовках что вам нужен json