init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
<?php
class DefaultHttpClient implements HttpClient{
/**
* @param HttpRequest $request
* @param int $timeout
* @return HttpResponse
* @throws RuntimeException
*/
public function makeRequest($request, $timeout=null){
$response = null;
$httpSocket=null;
try{
$httpString = $this->parseRequest($request);
$httpSocket = $this->createSocket($request->getURL(), $timeout);
$this->makeHttpRequest($httpSocket, $httpString);
$responseString = $this->retrieveHttpResponse($httpSocket);
$response = $this->parseResponse($responseString, $request);
$this->closeSocket($httpSocket);
}catch(Exception $ex){
$this->closeSocket($httpSocket);
$exceptionMessage='Http Request Failed. Request['.$request.'], Response['.$response.'].';
throw new Exception($exceptionMessage, null, $ex);
}
return $response;
}
/**
*
* @param URL $url
* @param int $timeout
* @return resource
* @throws RuntimeException
*/
private function createSocket($url, $timeout=null){
$host=$url->getHost();
$port = $url->getPort() == null ? 80 : $url->getPort();
if($url->getScheme() == 'https'){
$host='ssl://'.$url->getHost();
$port = $url->getPort() == null ? 443 : $url->getPort();
}
$errorCode = null;
$errorDescription = null;
$socket = null;
if (is_null($timeout)){
$socket = fsockopen($host, $port, $errorCode, $errorDescription);
}
else{
$socket = fsockopen($host, $port, $errorCode, $errorDescription, $timeout);
}
if (!is_resource($socket)) {
throw new RuntimeException($errorCode . " (" . $errorDescription . ")");
}
return $socket;
}
private function closeSocket($socket){
if(is_resource($socket)){
fclose($socket);
}
}
private function makeHttpRequest($socket, $httpString){
$this->checkSocket($socket);
fwrite($socket, $httpString);
}
private function checkSocket($socket){
if(!is_resource($socket)){
throw new RuntimeException("Invalid socket resource.");
}
}
/**
*
* @param string $responseString
* @param HttpRequest $request
* @return HttpResponse
*/
private function parseResponse($responseString, $request){
$responseParser = new HttpResponseParser();
$response = $responseParser->parse($responseString);
$response->setRequestOrigin($request);
return $response;
}
/**
* @param HttpRequest $request
* @return string
*/
private function parseRequest($request){
$requestParser = new HttpRequestParser();
$httpString = $requestParser->parse($request);
return $httpString;
}
/**
*
* @param resource $socket
* @return string
* @throws RuntimeException Caso não seja possível ler o recurso do caminho de origem
*/
private function retrieveHttpResponse($socket){
$this->checkSocket($socket);
$responseContent = "";
$line="";
while (!feof($socket)) {
$line=fgets($socket, 128);
$responseContent .= $line;
}
if($responseContent==null || trim($responseContent) == "" ){
throw new RuntimeException("Resource requested not found. Try change the request path.");
}
return $responseContent;
}
}