11<?php
22
3+ declare (strict_types=1 );
4+
35namespace Http \Client \Curl ;
46
57use Http \Client \Exception ;
68use Http \Client \HttpAsyncClient ;
79use Http \Client \HttpClient ;
810use Http \Discovery \MessageFactoryDiscovery ;
911use Http \Discovery \StreamFactoryDiscovery ;
10- use Http \Message \MessageFactory ;
11- use Http \Message \StreamFactory ;
1212use Http \Promise \Promise ;
1313use Psr \Http \Message \RequestInterface ;
14+ use Psr \Http \Message \ResponseFactoryInterface ;
1415use Psr \Http \Message \ResponseInterface ;
16+ use Psr \Http \Message \StreamFactoryInterface ;
1517use Symfony \Component \OptionsResolver \OptionsResolver ;
1618
1719/**
@@ -35,16 +37,16 @@ class Client implements HttpClient, HttpAsyncClient
3537 private $ options ;
3638
3739 /**
38- * PSR-7 message factory.
40+ * PSR-17 response factory.
3941 *
40- * @var MessageFactory
42+ * @var ResponseFactoryInterface
4143 */
42- private $ messageFactory ;
44+ private $ responseFactory ;
4345
4446 /**
45- * PSR-7 stream factory.
47+ * PSR-17 stream factory.
4648 *
47- * @var StreamFactory
49+ * @var StreamFactoryInterface
4850 */
4951 private $ streamFactory ;
5052
@@ -53,37 +55,43 @@ class Client implements HttpClient, HttpAsyncClient
5355 *
5456 * @var resource|null
5557 */
56- private $ handle = null ;
58+ private $ handle ;
5759
5860 /**
5961 * Simultaneous requests runner.
6062 *
6163 * @var MultiRunner|null
6264 */
63- private $ multiRunner = null ;
65+ private $ multiRunner ;
6466
6567 /**
66- * @param MessageFactory|null $messageFactory HTTP Message factory
67- * @param StreamFactory|null $streamFactory HTTP Stream factory
68- * @param array $options cURL options {@link http://php.net/curl_setopt}
68+ * Construct client.
69+ *
70+ * @param ResponseFactoryInterface|null $responseFactory PSR-17 HTTP response factory.
71+ * @param StreamFactoryInterface|null $streamFactory PSR-17 HTTP stream factory.
72+ * @param array $options cURL options {@link http://php.net/curl_setopt}
6973 *
7074 * @throws \Http\Discovery\Exception\NotFoundException If factory discovery failed
7175 *
76+ * @since x.x $messageFactory changed to PSR-17 ResponseFactoryInterface $responseFactory.
77+ * @since x.x $streamFactory type changed to PSR-17 StreamFactoryInterface.
7278 * @since 1.0
7379 */
7480 public function __construct (
75- MessageFactory $ messageFactory = null ,
76- StreamFactory $ streamFactory = null ,
81+ ResponseFactoryInterface $ responseFactory = null ,
82+ StreamFactoryInterface $ streamFactory = null ,
7783 array $ options = []
7884 ) {
79- $ this ->messageFactory = $ messageFactory ?: MessageFactoryDiscovery::find ();
80- $ this ->streamFactory = $ streamFactory ?: StreamFactoryDiscovery::find ();
85+ $ this ->responseFactory = $ responseFactory ; // FIXME ?: MessageFactoryDiscovery::find();
86+ $ this ->streamFactory = $ streamFactory; // FIXME ?: StreamFactoryDiscovery::find();
8187 $ resolver = new OptionsResolver ();
82- $ resolver ->setDefaults ([
83- CURLOPT_HEADER => false ,
84- CURLOPT_RETURNTRANSFER => false ,
85- CURLOPT_FOLLOWLOCATION => false ,
86- ]);
88+ $ resolver ->setDefaults (
89+ [
90+ CURLOPT_HEADER => false ,
91+ CURLOPT_RETURNTRANSFER => false ,
92+ CURLOPT_FOLLOWLOCATION => false ,
93+ ]
94+ );
8795 $ resolver ->setAllowedValues (CURLOPT_HEADER , [false ]); // our parsing will fail if this is set to true
8896 $ resolver ->setAllowedValues (CURLOPT_RETURNTRANSFER , [false ]); // our parsing will fail if this is set to true
8997
@@ -105,7 +113,7 @@ public function __destruct()
105113 }
106114
107115 /**
108- * Sends a PSR-7 request.
116+ * Sends a PSR-7 request and returns a PSR-7 response .
109117 *
110118 * @param RequestInterface $request
111119 *
@@ -363,17 +371,14 @@ private function createHeaders(RequestInterface $request, array $options): array
363371 * Create new ResponseBuilder instance.
364372 *
365373 * @return ResponseBuilder
366- *
367- * @throws \RuntimeException If creating the stream from $body fails
368374 */
369375 private function createResponseBuilder (): ResponseBuilder
370376 {
371- try {
372- $ body = $ this ->streamFactory ->createStream (fopen ('php://temp ' , 'w+b ' ));
373- } catch (\InvalidArgumentException $ e ) {
374- throw new \RuntimeException ('Can not create "php://temp" stream. ' );
375- }
376- $ response = $ this ->messageFactory ->createResponse (200 , null , [], $ body );
377+ $ body = $ this ->streamFactory ->createStreamFromFile ('php://temp ' , 'w+b ' );
378+
379+ $ response = $ this ->responseFactory
380+ ->createResponse (200 )
381+ ->withBody ($ body );
377382
378383 return new ResponseBuilder ($ response );
379384 }
0 commit comments