HttpClient::request()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
cc 1
eloc 16
nc 1
nop 1
1
<?php
2
3
namespace Saxulum\HttpClient\Zend;
4
5
use Zend\Http\Client;
6
use Zend\Http\Headers;
7
use Zend\Http\Request as ZendRequest;
8
use Zend\Http\Response as ZendResponse;
9
use Saxulum\HttpClient\HttpClientInterface;
10
use Saxulum\HttpClient\Request;
11
use Saxulum\HttpClient\Response;
12
13
class HttpClient implements HttpClientInterface
14
{
15
    /**
16
     * @var Client
17
     */
18
    protected $client;
19
20
    /**
21
     * @param Client $client
22
     */
23
    public function __construct(Client $client = null)
24
    {
25
        $this->client = null !== $client ? $client : new Client(null, array(
26
            'maxredirects' => 5
27
        ));
28
    }
29
30
    /**
31
     * @param  Request  $request
32
     * @return Response
33
     */
34
    public function request(Request $request)
35
    {
36
        $headers = new Headers();
37
        $headers->addHeaders($request->getHeaders());
38
39
        $zendRequest = new ZendRequest();
40
        $zendRequest->setVersion($request->getProtocolVersion());
41
        $zendRequest->setMethod($request->getMethod());
42
        $zendRequest->setUri((string) $request->getUrl());
43
        $zendRequest->setHeaders($headers);
44
        $zendRequest->setContent($request->getContent());
45
46
        /** @var ZendResponse $zendResponse */
47
        $zendResponse = $this->client->send($zendRequest);
48
49
        return new Response(
50
            (string) $zendResponse->getVersion(),
51
            $zendResponse->getStatusCode(),
52
            $zendResponse->getReasonPhrase(),
53
            $zendResponse->getHeaders()->toArray(),
54
            $zendResponse->getContent()
55
        );
56
    }
57
}
58