HttpClient   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
c 1
b 0
f 0
lcom 1
cbo 5
dl 0
loc 73
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 2
A request() 0 15 1
A prepareRequest() 0 18 1
A prepareHeaders() 0 10 3
1
<?php
2
3
namespace Saxulum\HttpClient\Buzz;
4
5
use Buzz\Browser;
6
use Buzz\Message\Request as BuzzRequest;
7
use Buzz\Message\Response as BuzzResponse;
8
use Saxulum\HttpClient\HeaderConverter;
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 Browser
17
     */
18
    protected $browser;
19
20
    /**
21
     * @param Browser $browser
22
     */
23
    public function __construct(Browser $browser = null)
24
    {
25
        $this->browser = null !== $browser ? $browser : new Browser();
26
    }
27
28
    /**
29
     * @param  Request  $request
30
     * @return Response
31
     */
32
    public function request(Request $request)
33
    {
34
        $buzzRequest = $this->prepareRequest($request);
35
36
        /** @var BuzzResponse $buzzResponse */
37
        $buzzResponse = $this->browser->send($buzzRequest);
0 ignored issues
show
Bug introduced by
The method send() does not seem to exist on object<Buzz\Browser>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
38
39
        return new Response(
40
            (string) $buzzResponse->getProtocolVersion(),
41
            $buzzResponse->getStatusCode(),
42
            $buzzResponse->getReasonPhrase(),
43
            HeaderConverter::convertRawToAssociative($buzzResponse->getHeaders()),
44
            $buzzResponse->getContent()
45
        );
46
    }
47
48
    /**
49
     * @param  Request     $request
50
     * @return BuzzRequest
51
     */
52
    protected function prepareRequest(Request $request)
53
    {
54
        $buzzRequest = new BuzzRequest(
55
            $request->getMethod(),
56
            $request->getUrl()->getResource(),
57
            $request->getUrl()->getHost()
58
        );
59
60
        $buzzRequest->setProtocolVersion($request->getProtocolVersion());
61
        $buzzRequest->setHeaders(
62
            HeaderConverter::convertAssociativeToRaw(
63
                $this->prepareHeaders($request)
64
            )
65
        );
66
        $buzzRequest->setContent($request->getContent());
67
68
        return $buzzRequest;
69
    }
70
71
    /**
72
     * @param  Request $request
73
     * @return array
74
     */
75
    protected function prepareHeaders(Request $request)
76
    {
77
        $headers = $request->getHeaders();
78
79
        if (null !== $request->getContent() && !isset($headers['Content-Type'])) {
80
            $headers['Content-Type'] = 'application/x-www-form-urlencoded';
81
        }
82
83
        return $headers;
84
    }
85
}
86