Skip to content

Commit

Permalink
Allow StreamInterface as raw HTTP Client body
Browse files Browse the repository at this point in the history
Since the body payload is passed through to Guzzle, which in turn can
handle Streams as well, this extends the versatility of the HTTP Client
  • Loading branch information
janolivermr committed Jan 16, 2024
1 parent 8d4eaeb commit 067219f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Illuminate/Http/Client/PendingRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class PendingRequest
/**
* The raw body for the request.
*
* @var string
* @var string|\Psr\Http\Message\StreamInterface
*/
protected $pendingBody;

Expand Down Expand Up @@ -259,7 +259,7 @@ public function baseUrl(string $url)
/**
* Attach a raw body to the request.
*
* @param string $content
* @param string|\Psr\Http\Message\StreamInterface $content
* @param string $contentType
* @return $this
*/
Expand Down
21 changes: 21 additions & 0 deletions tests/Http/HttpClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use GuzzleHttp\Middleware;
use GuzzleHttp\Promise\PromiseInterface;
use GuzzleHttp\Psr7\Response as Psr7Response;
use GuzzleHttp\Psr7\Utils;
use GuzzleHttp\TransferStats;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Contracts\Support\Arrayable;
Expand Down Expand Up @@ -357,6 +358,26 @@ public function testSendRequestBodyWithManyAmpersands()
$this->factory->withBody($body, 'text/plain')->send('post', 'http://foo.com/api');
}

public function testSendStreamRequestBody()
{
$string = 'Look at me, i am a stream!!';
$resource = fopen('php://temp', 'w');
fwrite($resource, $string);
rewind($resource);
$body = Utils::streamFor($resource);

$fakeRequest = function (Request $request) use ($body, $string) {
self::assertSame($string, $request->body());
self::assertContains('text/plain', $request->header('Content-Type'));

return ['my' => 'response'];
};

$this->factory->fake($fakeRequest);

$this->factory->withBody($body, 'text/plain')->send('post', 'http://foo.com/api');
}

public function testUrlsCanBeStubbedByPath()
{
$this->factory->fake([
Expand Down

0 comments on commit 067219f

Please sign in to comment.