Могу ли я добавить промежуточное ПО к файлу Guzzle 6 HandlerStack по умолчанию, а не создавать новый стек?

Я использую программное обеспечение Spatie\Crawler crawler довольно стандартным образом, например:

 $client = new Client([ RequestOptions::COOKIES => true, RequestOptions::CONNECT_TIMEOUT => 10, RequestOptions::TIMEOUT => 10, RequestOptions::ALLOW_REDIRECTS => true, ]); $crawler = new Crawler($client, 1); $crawler-> setCrawlProfile(new MyCrawlProfile($startUrl, $pathRegex))-> setCrawlObserver(new MyCrawlObserver())-> startCrawling($url); 

Я пропустил определение классов MyCrawlProfile для MyCrawlObserver для краткости, но в любом случае это работает так, как оно есть.

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

 $stack = new HandlerStack(); $stack->setHandler(new CurlHandler()); $stack->push( Middleware::mapRequest(function (RequestInterface $request) { echo "Middleware running\n"; return $request; }) ); $client = new Client([ RequestOptions::COOKIES => true, RequestOptions::CONNECT_TIMEOUT => 10, RequestOptions::TIMEOUT => 10, RequestOptions::ALLOW_REDIRECTS => true, 'handler' => $stack, ]); // ... rest of crawler code here ... 

Однако он попадает на первое препятствие – он разрушает корень сайта ( / ), который на самом деле является перенаправлением Location , а затем останавливается. Оказывается, теперь я пропускаю RedirectMiddleware несмотря на то, что не убрал его намеренно.

Итак, моя проблема исправлена, добавив также:

 $stack->push(Middleware::redirect()); 

Интересно, какие другие вещи настроены по умолчанию в Guzzle, которые я случайно удалил, создав новый HandlerStack . Печенье? Механизмы повторного запуска? Другие вещи? Мне сейчас не нужны эти вещи, но я был бы более уверен в долговечности моей системы, если бы мой код просто изменил существующий стек.

Есть ли способ сделать это? Насколько я могу судить, я делаю вещи в соответствии с руководством .