|
10 | 10 | namespace chillerlan\HTTP\Psr7; |
11 | 11 |
|
12 | 12 | use InvalidArgumentException; |
13 | | -use Psr\Http\Message\ResponseInterface; |
14 | | -use Psr\Http\Message\UploadedFileInterface; |
| 13 | +use Psr\Http\Message\{MessageInterface, RequestInterface, ResponseInterface, UploadedFileInterface}; |
15 | 14 |
|
16 | 15 | const PSR7_INCLUDES = true; |
17 | 16 |
|
@@ -297,3 +296,34 @@ function get_json(ResponseInterface $response, bool $assoc = null){ |
297 | 296 | function get_xml(ResponseInterface $response){ |
298 | 297 | return simplexml_load_string($response->getBody()->getContents()); |
299 | 298 | } |
| 299 | + |
| 300 | +/** |
| 301 | + * Returns the string representation of an HTTP message. (from Guzzle) |
| 302 | + * |
| 303 | + * @param MessageInterface $message Message to convert to a string. |
| 304 | + * |
| 305 | + * @return string |
| 306 | + */ |
| 307 | +function message_to_string(MessageInterface $message){ |
| 308 | + |
| 309 | + if($message instanceof RequestInterface){ |
| 310 | + $msg = trim($message->getMethod().' '.$message->getRequestTarget()).' HTTP/'.$message->getProtocolVersion(); |
| 311 | + |
| 312 | + if(!$message->hasHeader('host')){ |
| 313 | + $msg .= "\r\nHost: ".$message->getUri()->getHost(); |
| 314 | + } |
| 315 | + |
| 316 | + } |
| 317 | + elseif($message instanceof ResponseInterface){ |
| 318 | + $msg = 'HTTP/'.$message->getProtocolVersion().' '.$message->getStatusCode().' '.$message->getReasonPhrase(); |
| 319 | + } |
| 320 | + else{ |
| 321 | + throw new \InvalidArgumentException('Unknown message type'); |
| 322 | + } |
| 323 | + |
| 324 | + foreach($message->getHeaders() as $name => $values){ |
| 325 | + $msg .= "\r\n{$name}: ".implode(', ', $values); |
| 326 | + } |
| 327 | + |
| 328 | + return "{$msg}\r\n\r\n".$message->getBody(); |
| 329 | +} |
0 commit comments