HttpClient::prepareRequest()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 18
rs 9.4285
cc 2
eloc 10
nc 2
nop 1
1
<?php
2
3
namespace Saxulum\HttpClient\Guzzle;
4
5
use GuzzleHttp\Client;
6
use GuzzleHttp\Message\Request as GuzzleRequest;
7
use GuzzleHttp\Message\Response as GuzzleResponse;
8
use GuzzleHttp\Stream\Stream;
9
use Saxulum\HttpClient\HeaderConverter;
10
use Saxulum\HttpClient\HttpClientInterface;
11
use Saxulum\HttpClient\Request;
12
use Saxulum\HttpClient\Response;
13
14
class HttpClient implements HttpClientInterface
15
{
16
    /**
17
     * @var Client
18
     */
19
    protected $client;
20
21
    public function __construct(Client $client = null)
22
    {
23
        $this->client = null !== $client ? $client : new Client();
24
    }
25
26
    /**
27
     * @param  Request  $request
28
     * @return Response
29
     */
30
    public function request(Request $request)
31
    {
32
        $guzzleRequest = $this->prepareRequest($request);
33
34
        /** @var GuzzleResponse $guzzleResponse */
35
        $guzzleResponse = $this->client->send($guzzleRequest);
36
37
        return new Response(
38
            $guzzleResponse->getProtocolVersion(),
39
            (int) $guzzleResponse->getStatusCode(),
40
            $guzzleResponse->getReasonPhrase(),
41
            HeaderConverter::convertComplexAssociativeToFlatAssociative($guzzleResponse->getHeaders()),
42
            (string) $guzzleResponse->getBody()
43
        );
44
    }
45
46
    /**
47
     * @param  Request       $request
48
     * @return GuzzleRequest
49
     */
50
    protected function prepareRequest(Request $request)
51
    {
52
        $guzzleRequest = $this->client->createRequest(
53
            $request->getMethod(),
54
            (string) $request->getUrl(),
55
            array(
56
                'version' => $request->getProtocolVersion(),
57
            )
58
        );
59
60
        if (null !== $content = $request->getContent()) {
61
            $guzzleRequest->setBody(Stream::factory($content));
62
        }
63
64
        $guzzleRequest->setHeaders($this->prepareHeaders($request));
65
66
        return $guzzleRequest;
67
    }
68
69
    /**
70
     * @param  Request $request
71
     * @return array
72
     */
73
    protected function prepareHeaders(Request $request)
74
    {
75
        $headers = $request->getHeaders();
76
77
        if (null !== $request->getContent() && !isset($headers['Content-Type'])) {
78
            $headers['Content-Type'] = 'application/x-www-form-urlencoded';
79
        }
80
81
        return $headers;
82
    }
83
}
84