You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
3.2 KiB
162 lines
3.2 KiB
3 years ago
|
<?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);
|
||
|
}
|
||
|
|
||
|
}
|