HttpClientMiddleware.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace Drupal\webprofiler\Http;
  3. use GuzzleHttp\Exception\RequestException;
  4. use GuzzleHttp\TransferStats;
  5. use Psr\Http\Message\RequestInterface;
  6. /**
  7. * Class HttpClientMiddleware
  8. */
  9. class HttpClientMiddleware {
  10. /**
  11. * @var array
  12. */
  13. private $completedRequests;
  14. /**
  15. * @var array
  16. */
  17. private $failedRequests;
  18. /**
  19. *
  20. */
  21. public function __construct() {
  22. $this->completedRequests = [];
  23. $this->failedRequests = [];
  24. }
  25. /**
  26. * {@inheritdoc}
  27. */
  28. public function __invoke() {
  29. return function ($handler) {
  30. return function (RequestInterface $request, array $options) use ($handler) {
  31. // If on_stats callback is already set then save it
  32. // and call it after ours.
  33. if (isset($options['on_stats'])) {
  34. $next = $options['on_stats'];
  35. }
  36. else {
  37. $next = function(TransferStats $stats) {};
  38. }
  39. $options['on_stats'] = function (TransferStats $stats) use ($request, $next) {
  40. $request->stats = $stats;
  41. $next($stats);
  42. };
  43. return $handler($request, $options)->then(
  44. function ($response) use ($request) {
  45. $this->completedRequests[] = [
  46. 'request' => $request,
  47. 'response' => $response,
  48. ];
  49. return $response;
  50. },
  51. function ($reason) use ($request) {
  52. $response = $reason instanceof RequestException
  53. ? $reason->getResponse()
  54. : null;
  55. $this->failedRequests[] = [
  56. 'request' => $request,
  57. 'response' => $response,
  58. 'message' => $reason->getMessage(),
  59. ];
  60. return \GuzzleHttp\Promise\rejection_for($reason);
  61. }
  62. );
  63. };
  64. };
  65. }
  66. /**
  67. * @return array
  68. */
  69. public function getCompletedRequests() {
  70. return $this->completedRequests;
  71. }
  72. /**
  73. * @return array
  74. */
  75. public function getFailedRequests() {
  76. return $this->failedRequests;
  77. }
  78. }