PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / trunk
Yoast SEO – Advanced SEO with real-time guidance and built-in AI vtrunk
28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 19.0 All 129 releases
← All changes | vendor_prefixed/guzzlehttp/guzzle/src/MessageFormatter.php +39 -24 19.0 → trunk View file →
@@ -30,25 +30,31 @@
30 30 * - {req_headers}: Request headers
31 31 * - {res_headers}: Response headers
32 32 * - {req_body}: Request body
33 33 * - {res_body}: Response body
34 + *
35 + * @final
34 36 */
35 -class MessageFormatter
37 +class MessageFormatter implements \YoastSEO_Vendor\GuzzleHttp\MessageFormatterInterface
36 38 {
37 39 /**
38 40 * Apache Common Log Format.
39 - * @link http://httpd.apache.org/docs/2.4/logs.html#common
41 + *
42 + * @see https://httpd.apache.org/docs/2.4/logs.html#common
43 + *
40 44 * @var string
41 45 */
42 - const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
43 - const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
44 - const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
45 - /** @var string Template used to format log messages */
46 + public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] "{method} {target} HTTP/{version}" {code} {res_header_Content-Length}';
47 + public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
48 + public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
49 + /**
50 + * @var string Template used to format log messages
51 + */
46 52 private $template;
47 53 /**
48 54 * @param string $template Log message template
49 55 */
50 - public function __construct($template = self::CLF)
56 + public function __construct(?string $template = self::CLF)
51 57 {
52 58 $this->template = $template ?: self::CLF;
53 59 }
54 60 /**
@@ -53,18 +59,16 @@
53 59 }
54 60 /**
55 61 * Returns a formatted message string.
56 62 *
57 - * @param RequestInterface $request Request that was sent
58 - * @param ResponseInterface $response Response that was received
59 - * @param \Exception $error Exception that was received
60 - *
61 - * @return string
63 + * @param RequestInterface $request Request that was sent
64 + * @param ResponseInterface|null $response Response that was received
65 + * @param \Throwable|null $error Exception that was received
62 66 */
63 - public function format(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, \Exception $error = null)
67 + public function format(\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, ?\YoastSEO_Vendor\Psr\Http\Message\ResponseInterface $response = null, ?\Throwable $error = null) : string
64 68 {
65 69 $cache = [];
66 - return \preg_replace_callback('/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/', function (array $matches) use($request, $response, $error, &$cache) {
70 + $result = \preg_replace_callback('/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/', function (array $matches) use($request, $response, $error, &$cache) {
67 71 if (isset($cache[$matches[1]])) {
68 72 return $cache[$matches[1]];
69 73 }
70 74 $result = '';
@@ -69,24 +73,33 @@
69 73 }
70 74 $result = '';
71 75 switch ($matches[1]) {
72 76 case 'request':
73 - $result = \YoastSEO_Vendor\GuzzleHttp\Psr7\str($request);
77 + $result = \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::toString($request);
74 78 break;
75 79 case 'response':
76 - $result = $response ? \YoastSEO_Vendor\GuzzleHttp\Psr7\str($response) : '';
80 + $result = $response ? \YoastSEO_Vendor\GuzzleHttp\Psr7\Message::toString($response) : '';
77 81 break;
78 82 case 'req_headers':
79 - $result = \trim($request->getMethod() . ' ' . $request->getRequestTarget()) . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $this->headers($request);
83 + $result = \trim($request->getMethod() . ' ' . $request->getRequestTarget(), " \n\r\t\x00\v") . ' HTTP/' . $request->getProtocolVersion() . "\r\n" . $this->headers($request);
80 84 break;
81 85 case 'res_headers':
82 86 $result = $response ? \sprintf('HTTP/%s %d %s', $response->getProtocolVersion(), $response->getStatusCode(), $response->getReasonPhrase()) . "\r\n" . $this->headers($response) : 'NULL';
83 87 break;
84 88 case 'req_body':
85 - $result = $request->getBody();
89 + $result = $request->getBody()->__toString();
86 90 break;
87 91 case 'res_body':
88 - $result = $response ? $response->getBody() : 'NULL';
92 + if (!$response instanceof \YoastSEO_Vendor\Psr\Http\Message\ResponseInterface) {
93 + $result = 'NULL';
94 + break;
95 + }
96 + $body = $response->getBody();
97 + if (!$body->isSeekable()) {
98 + $result = 'RESPONSE_NOT_LOGGEABLE';
99 + break;
100 + }
101 + $result = $response->getBody()->__toString();
89 102 break;
90 103 case 'ts':
91 104 case 'date_iso_8601':
92 105 $result = \gmdate('c');
@@ -101,9 +114,9 @@
101 114 $result = $request->getProtocolVersion();
102 115 break;
103 116 case 'uri':
104 117 case 'url':
105 - $result = $request->getUri();
118 + $result = $request->getUri()->__toString();
106 119 break;
107 120 case 'target':
108 121 $result = $request->getRequestTarget();
109 122 break;
@@ -138,19 +151,21 @@
138 151 }
139 152 $cache[$matches[1]] = $result;
140 153 return $result;
141 154 }, $this->template);
155 + if ($result === null) {
156 + throw new \RuntimeException('Unable to format message: ' . \preg_last_error_msg());
157 + }
158 + return $result;
142 159 }
143 160 /**
144 161 * Get headers from message as string
145 - *
146 - * @return string
147 162 */
148 - private function headers(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message)
163 + private function headers(\YoastSEO_Vendor\Psr\Http\Message\MessageInterface $message) : string
149 164 {
150 165 $result = '';
151 166 foreach ($message->getHeaders() as $name => $values) {
152 167 $result .= $name . ': ' . \implode(', ', $values) . "\r\n";
153 168 }
154 - return \trim($result);
169 + return \trim($result, " \n\r\t\x00\v");
155 170 }
156 171 }