Skip to content

Commit 8fa4792

Browse files
committed
:octocat:
1 parent 491dfbd commit 8fa4792

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

src/Psr7/message_helpers.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
namespace chillerlan\HTTP\Psr7;
1111

1212
use InvalidArgumentException;
13-
use Psr\Http\Message\ResponseInterface;
14-
use Psr\Http\Message\UploadedFileInterface;
13+
use Psr\Http\Message\{MessageInterface, RequestInterface, ResponseInterface, UploadedFileInterface};
1514

1615
const PSR7_INCLUDES = true;
1716

@@ -297,3 +296,34 @@ function get_json(ResponseInterface $response, bool $assoc = null){
297296
function get_xml(ResponseInterface $response){
298297
return simplexml_load_string($response->getBody()->getContents());
299298
}
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

Comments
 (0)