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.
		
		
		
		
		
			
		
			
				
					
					
						
							161 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
	
	
							161 lines
						
					
					
						
							3.2 KiB
						
					
					
				<?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); | 
						|
	} | 
						|
 | 
						|
}
 | 
						|
 |