FastSitePHP\Net\HttpClient

HTTP Client

This class provides a simple and secure API and wraps either CURL or PHP Stream Context depending on what is available. Common HTTP requests can be made with one line of code using static helper functions.

Código Fonte

GitHub

Código de Exemplo

Utilizando o Cliente HTTP

// HttpClient pode ser utilizado para simplificar a comunicação com
// outros serviços web, APIs HTTP e funciona muito bem para chamar
// e retornar o resultado de serviços locais - por exemplo um serviço
// AI/ML (Artificial Intelligence / Machine Learning) escrito em
// Python com TensorFlow ou scikit-learn.

// Faça um requisição HTTP GET simples e verifique o resultado
$res = \FastSitePHP\Net\HttpClient::get($url);
if ($res->error) {
    // Um erro seria retornado em uma eventual falha grave como tempo limite
    // atingido ou um erro de certificado SSL. Uma resposta 404 ou 500 do
    // servidor seria tratada verificando o [status_code].
    $error = $res->error;
} else {
    $status_code = $res->status_code; // 200, 404, 500 etc
    $headers = $res->headers; // Array de Cabeçalhos de Resposta
    $content = $res->content; // Conteúdo da Resposta como uma String - HTML, Texto etc
    $info = $res->info; // Array de Informações como Estatísticas de Tempo
}

// Realize uma Requisição HTTP GET e leia o Resultado JSON. Se o Content-Type
// da Resposta for 'application/json' então [$res->json] conterá um array
// caso contrário, conterá null. Cabeçalhos de Requisição podem receber um
// parâmetro opcional.
$headers = [
    'X-API-Key' => 'ab82050cf5907934fa1d0f6f66284642a01d1ba2280656870c',
    'X-Custom-Header' => 'Teste',
];
$res_json = \FastSitePHP\Net\HttpClient::get($url, $headers);
$json = $res->json;
$text = $res->content;

// Envie uma Requisição HTTP POST como JSON e também como um Form.
// Dados podem ser um Array ou um Objeto e Cabeçalhos são opcionais.
$data = [
    'text' => 'teste',
    'num' => 123,
];
$res_post = \FastSitePHP\Net\HttpClient::postJson($url, $data, $headers);
$res_form = \FastSitePHP\Net\HttpClient::postForm($url, $data);

// Ao utilizar PHP 5.5 ou mais recente, 'multipart/form-data' Form Posts são
// suportados com a classe integrada [CURLFile]:
/*
$data = [
    'field1' => 'teste',
    'file' => new \CURLFile($file_path),
];
*/

// Salve o Conteúdo da Resposta como um Download de Arquivo
// Assim como [postJson ()] e [postForm ()] Request Headers são opcionais.
$res_file = \FastSitePHP\Net\HttpClient::downloadFile($url, $save_path, $headers);
$saved_path = $res_file->content;

// O código de demonstração acima mostra as quatro funções estáticas
// auxiliares [get(), postJson(), postForm() e downloadFile()]. Opções
// adicionais estão disponíveis quando utilizar a HttpClient como um
// objeto com o mesmo método [request()].

// Envie uma Requisição PUT com um arquivo como o Corpo de Requisição
$http = new \FastSitePHP\Net\HttpClient();
$res_put = $http->request($url, [
    'method' => 'PUT',
    'headers' => $headers,
    'send_file' => $file_path,
]);

Propriedades

Nome Tipo de Dados Padrão Descrição
cainfo_path string
(Estático)
__DIR__ . '/cacert.pem' Some OS's (often Windows and Mac) will not support HTTPS by default unless a file is downloaded and [php.ini] is updated outside of PHP. The downloaded file handles [HTTPS] validation. A copy of the file [cacert.pem] is included in this directory in case it doesn't exist on the OS, however the file needs to be updated from time to time to keep current. This property allows an app to specify it's own version of the file in another directory.
allow_insecure bool
(Estático)
false Allow HTTPS to be ignored. This should only be used as last resort in trusted environments as it breaks security. Instead it is better to set [HttpClient::$cainfo_path].

Métodos

get($url, array $headers = null)

Função Estática

Submit a GET Request and optionally specify an array of Request Headers.

Retorna: HttpResponse

postJson($url, $data, array $headers = null)

Função Estática

Submit a POST Request with JSON Data as the Request Body.

Retorna: HttpResponse

postForm($url, $fields, array $headers = null)

Função Estática

Submit a POST Request with Form Data. If sending a form with files and form type 'multipart/form-data' use the PHP class CURLFile. See examples for more.

Retorna: HttpResponse

downloadFile($url, $path, array $headers = null)

Função Estática

Submit a GET Request and save the Response Body to a file. [HttpResponse->content] will contain the saved file path.

Retorna: HttpResponse

request($url, array $options = null)

Submit a Request and return an HttpResponse object.

Options:
  'mode' = null or 'curl' or 'php'
      Defaults to null which uses curl. This option is defined for unit testing. Leaving the default works best.
  'method' = 'GET', 'POST', 'PUT', etc
      Defaults to 'GET'
  'headers' = Array of Request Headears [key => value]
  'json' = Array or Object of Data to send with the Request
  'form' = Array or Object of Form Data, see additional comments in [postForm()]
  'send_file' = Full path of a file to send as the Request Body
  'save_file' = Full path where to save the response, if set then [HttpResponse->content] will contain the saved file path
  'timeout' = Timeout in Seconds
      Defaults to 0 which means the code stops until the request completes.
      When using curl mode this value applies to both the inital connection and the curl request.
  'parse_json' = true/false - By default if a JSON response is returned the [$res->content]
      will be parsed to [$res->json] as an Associative Array. It can be turned off by setting this to false

Retorna: HttpResponse

certPath()

Return the location for the [cacert.pem] file (the name can vary from system to system). Also see comments in for static property [cainfo_path].

Retorna: string