3 namespace Drupal\webprofiler\Http;
5 use GuzzleHttp\Exception\RequestException;
6 use GuzzleHttp\TransferStats;
7 use Psr\Http\Message\RequestInterface;
10 * Class HttpClientMiddleware
12 class HttpClientMiddleware {
17 private $completedRequests;
22 private $failedRequests;
27 public function __construct() {
28 $this->completedRequests = [];
29 $this->failedRequests = [];
35 public function __invoke() {
36 return function ($handler) {
37 return function (RequestInterface $request, array $options) use ($handler) {
39 $options['on_stats'] = function (TransferStats $stats) use ($request) {
40 $request->stats = $stats;
43 return $handler($request, $options)->then(
44 function ($response) use ($request) {
46 $this->completedRequests[] = [
47 'request' => $request,
48 'response' => $response,
53 function ($reason) use ($request) {
54 $response = $reason instanceof RequestException
55 ? $reason->getResponse()
58 $this->failedRequests[] = [
59 'request' => $request,
60 'response' => $response,
61 'message' => $reason->getMessage(),
64 return \GuzzleHttp\Promise\rejection_for($reason);
74 public function getCompletedRequests() {
75 return $this->completedRequests;
81 public function getFailedRequests() {
82 return $this->failedRequests;