Riyyi
3 years ago
3 changed files with 183 additions and 0 deletions
@ -0,0 +1,161 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace App\Classes\Http; |
||||||
|
|
||||||
|
class Http { |
||||||
|
|
||||||
|
private string $bodyContent; |
||||||
|
|
||||||
|
private string $bodyFormat; |
||||||
|
|
||||||
|
private array $options = []; |
||||||
|
|
||||||
|
//-------------------------------------// |
||||||
|
|
||||||
|
public function __construct() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public function delete(string $url, $data = []): Response |
||||||
|
{ |
||||||
|
return $this->send('DELETE', $url, [ |
||||||
|
$this->bodyFormat => $data |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
public function get(string $url, $query = null): Response |
||||||
|
{ |
||||||
|
return $this->send('GET', $url, [ |
||||||
|
'query' => $query |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
public function patch(string $url, array $data = []): Response |
||||||
|
{ |
||||||
|
return $this->send('PATCH', $url, [ |
||||||
|
$this->bodyFormat => $data |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
public function put(string $url, array $data = []): Response |
||||||
|
{ |
||||||
|
return $this->send('PUT', $url, [ |
||||||
|
$this->bodyFormat => $data |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
public function post(string $url, array $data = []): Response |
||||||
|
{ |
||||||
|
return $this->send('POST', $url, [ |
||||||
|
$this->bodyFormat => $data |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
//-------------------------------------// |
||||||
|
|
||||||
|
public function accept(string $contentType): Http |
||||||
|
{ |
||||||
|
return $this->withHeaders(['Accept' => $contentType]); |
||||||
|
} |
||||||
|
|
||||||
|
public function acceptJson(): Http |
||||||
|
{ |
||||||
|
return $this->accept('application/json'); |
||||||
|
} |
||||||
|
|
||||||
|
public function asForm(): Http |
||||||
|
{ |
||||||
|
return $this->bodyFormat('form_params') |
||||||
|
->contentType('application/x-www-form-urlencoded'); |
||||||
|
} |
||||||
|
|
||||||
|
public function asJson(): Http |
||||||
|
{ |
||||||
|
return $this->bodyFormat('json') |
||||||
|
->contentType('application/json'); |
||||||
|
} |
||||||
|
|
||||||
|
public function bodyFormat(string $format): Http |
||||||
|
{ |
||||||
|
$this->bodyFormat = $format; |
||||||
|
return $this; |
||||||
|
} |
||||||
|
|
||||||
|
public function contentType(string $type): Http |
||||||
|
{ |
||||||
|
return $this->withHeaders(['Content-Type' => $type]); |
||||||
|
} |
||||||
|
|
||||||
|
public function withBody(string $content, string $contentType): Http |
||||||
|
{ |
||||||
|
$this->bodyFormat('body'); |
||||||
|
|
||||||
|
$this->bodyContent = $content; |
||||||
|
|
||||||
|
$this->contentType($contentType); |
||||||
|
|
||||||
|
return $this; |
||||||
|
} |
||||||
|
|
||||||
|
public function withHeaders(array $headers): Http |
||||||
|
{ |
||||||
|
$this->options = array_merge_recursive($this->options, [ |
||||||
|
'headers' => $headers, |
||||||
|
]); |
||||||
|
|
||||||
|
return $this; |
||||||
|
} |
||||||
|
|
||||||
|
public function withToken(string $token): Http |
||||||
|
{ |
||||||
|
$this->withHeaders(['Authorization' => 'Bearer ' . trim($token)]); |
||||||
|
return $this; |
||||||
|
} |
||||||
|
|
||||||
|
//-------------------------------------// |
||||||
|
|
||||||
|
public function send(string $method, string $url, array $options = []): Response |
||||||
|
{ |
||||||
|
// Format headers |
||||||
|
$headers = []; |
||||||
|
if (_exists($this->options, 'headers')) { |
||||||
|
foreach ($this->options['headers'] as $key => $value) { |
||||||
|
$headers[] = "$key: $value"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Fill body content |
||||||
|
switch ($this->bodyFormat) { |
||||||
|
case 'body': |
||||||
|
break; |
||||||
|
case 'json': |
||||||
|
if (_exists($options, 'json')) { |
||||||
|
$this->bodyContent = json_encode($options['json']); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'form_params': |
||||||
|
if (_exists($options, 'form_params')) { |
||||||
|
$this->bodyContent = http_build_query($options['form_params']); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
// Send HTTP request |
||||||
|
$curl = curl_init(); |
||||||
|
curl_setopt($curl, CURLOPT_URL, $url); |
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); |
||||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); |
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->bodyContent); |
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
||||||
|
$response = curl_exec($curl); |
||||||
|
curl_close($curl); |
||||||
|
|
||||||
|
// On failed requests |
||||||
|
if (!$response) { |
||||||
|
$response = ''; |
||||||
|
} |
||||||
|
|
||||||
|
return new Response($response); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace App\Classes\Http; |
||||||
|
|
||||||
|
class Response { |
||||||
|
|
||||||
|
private string $response; |
||||||
|
|
||||||
|
public function __construct(string $response) |
||||||
|
{ |
||||||
|
$this->response = $response; |
||||||
|
} |
||||||
|
|
||||||
|
//-------------------------------------// |
||||||
|
|
||||||
|
public function body(): string |
||||||
|
{ |
||||||
|
return $this->response; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue