Completed
Push — master ( e3c4d3...a92d5c )
by Alexandre
02:53
created

CurlRequestFactory::getHost()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * php-guard/curl <https://github.com/php-guard/curl>
4
 * Copyright (C) 2018 by Alexandre Le Borgne <[email protected]>
5
 *
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 */
19
20
namespace PhpGuard\Curl;
21
22
23
class CurlRequestFactory
24
{
25
    const DEFAULT_CURL_OPTIONS = [
26
        CURLOPT_RETURNTRANSFER => true,
27
        CURLOPT_HEADER => true,
28
        CURLINFO_HEADER_OUT => true,
29
        CURLOPT_ENCODING => "",
30
        CURLOPT_MAXREDIRS => 10,
31
        CURLOPT_TIMEOUT => 30,
32
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
33
    ];
34
35
    protected $defaultCurlOptions;
36
    protected $defaultHeaders;
37
    /**
38
     * @var null|string
39
     */
40
    private $host;
41
    /**
42
     * @var Curl
43
     */
44
    private $curl;
45
46
    public function __construct(Curl $curl, ?string $host = null)
47
    {
48
        if ($host) {
49
            $host = rtrim($host, '/');
50
        }
51
52
        $this->defaultHeaders = new Headers();
53
        $this->defaultCurlOptions = new CurlOptions(self::DEFAULT_CURL_OPTIONS);
54
        $this->host = $host;
55
        $this->curl = $curl;
56
    }
57
58 12
    public function create(string $method, string $url, $data = null, $query = null, array $headers = []) {
59 12
        if ($this->host && is_null(parse_url($url, PHP_URL_HOST))) {
1 ignored issue
show
introduced by
The condition is_null(parse_url($url, ...ard\Curl\PHP_URL_HOST)) is always false.
Loading history...
60
            $url = $this->host . $url;
61
        }
62
63 12
        if (!empty($query)) {
64 2
            $url .= '?' . (is_string($query) ? $query : http_build_query($query, '', '&'));
65
        }
66
67 12
        $headers = $this->defaultHeaders->replace($headers)->all();
68 12
        return new CurlRequest($this->curl, $url, $method, $data, $headers, $this->defaultCurlOptions->all());
69
    }
70
71
    /**
72
     * If set to false, ignore error "SSL certificate problem: unable to get local issuer certificate"
73
     * Default to true
74
     * @param bool $value
75
     * @return CurlRequestFactory
76
     */
77
    public function setSslVerifyPeer(bool $value): self
78
    {
79
        $this->defaultCurlOptions[CURLOPT_SSL_VERIFYPEER] = $value;
80
81
        return $this;
82
    }
83
84
    public function getDefaultCurlOptions(): CurlOptions
85
    {
86
        return $this->defaultCurlOptions;
87
    }
88
89
    /**
90
     * @return Headers
91
     */
92
    public function getDefaultHeaders(): Headers
93
    {
94
        return $this->defaultHeaders;
95
    }
96
97
    /**
98
     * @return null|string
99
     */
100
    public function getHost(): ?string
101
    {
102
        return $this->host;
103
    }
104
105
    /**
106
     * @param null|string $host
107
     * @return CurlRequestFactory
108
     */
109
    public function setHost(?string $host): self
110
    {
111
        if($host) {
112
            $host = rtrim($host, '/');
113
        }
114
115
        $this->host = $host;
116
117
        return $this;
118
    }
119
}