Http
in package
Cliente HTTP minimalista basado en cURL con API fluida.
Se usa siempre a través de los factories estáticos Http::get(), Http::post(), Http::put(),
Http::patch(), Http::delete() o Http::postJson(). La petición se construye de forma
encadenable (setHeader(), setBearerToken(), setTimeout(), ...) y se ejecuta de manera
perezosa: la primera llamada a un getter (body(), status(), headers(), json(), ...)
dispara exec() y cachea el resultado en la propia instancia. Llamar a getters posteriores
no lanza una nueva petición.
Notas relevantes:
- Por defecto sigue redirecciones (
CURLOPT_FOLLOWLOCATION) y timeout de 30 segundos. - Las cabeceras de respuesta se almacenan en minúsculas para que
header()sea case-insensitive. getPostFields()respeta el Content-Type: si esmultipart/form-datase envía el array tal cual (cURL construye el body multipart); en otro caso se serializa conhttp_build_query.ok()solo considera 200/201/202 como éxito; el resto (incluido 204 No Content) cuentan como fallo. Si necesitas otra interpretación, usastatus()directamente.
Table of Contents
Properties
- $error : mixed
- Mensaje de error devuelto por `curl_error()`, vacío si no hubo fallo a nivel de transporte.
- $body : mixed
- Cuerpo crudo de la respuesta tras `exec()`.
- $data : mixed
- Datos a enviar: array (se codifica según método y Content-Type) o string en bruto.
- $method : mixed
- Método HTTP de la petición (GET, POST, PUT, PATCH, DELETE).
- $url : mixed
- URL destino. Para GET/DELETE con `$data` array, los parámetros se añaden como query string al ejecutar.
- $curlOptions : mixed
- Mapa de opciones cURL que se aplicarán a la petición.
- $executed : mixed
- Indica si la petición ya se ha ejecutado, para evitar dispararla varias veces.
- $headers : mixed
- Cabeceras de la petición saliente, ya formateadas como `"Clave: Valor"`.
- $responseHeaders : mixed
- Cabeceras de respuesta indexadas en minúsculas, cada una con sus valores como array.
- $statusCode : mixed
- Código HTTP de respuesta. 0 mientras no se haya ejecutado la petición.
Methods
- __construct() : mixed
- Construye una petición. Pensado para uso interno: en el código cliente, prefiérense los factories estáticos (`Http::get()`, `Http::post()`, ...) que dejan el método explícito.
- body() : string
- Devuelve el cuerpo crudo de la respuesta, ejecutando la petición si aún no se había hecho.
- delete() : self
- Crea una petición DELETE. Si `$data` es array, sus claves se añaden como query string en la URL (DELETE no lleva cuerpo). Si es string, se envía la URL tal cual y se ignora el dato.
- errorMessage() : string
- Devuelve el mensaje de error de cURL (cadena vacía si no hubo error). Ejecuta la petición si hace falta.
- failed() : bool
- Atajo de `!ok()`: true si la petición no terminó con un código 200/201/202.
- get() : self
- Crea una petición GET. Si `$data` es un array no vacío, se concatena como query string a la URL al ejecutar la petición.
- header() : string
- Devuelve el primer valor de la cabecera de respuesta `$key` (case-insensitive), o cadena vacía si no existe.
- headers() : array<string|int, mixed>
- Devuelve todas las cabeceras de respuesta indexadas en minúsculas.
- json() : mixed
- Decodifica el cuerpo de la respuesta como JSON.
- notFound() : bool
- True si la respuesta tiene código 404. Ejecuta la petición si aún no se había ejecutado.
- ok() : bool
- True si la respuesta tiene código 200, 201 o 202.
- patch() : self
- Crea una petición PATCH; el cuerpo se construye igual que en POST.
- post() : self
- Crea una petición POST. Si `$data` es array, se enviará como `application/x-www-form-urlencoded` salvo que se establezca un Content-Type distinto (multipart/form-data envía el array tal cual).
- postJson() : self
- Atajo para POST con cuerpo JSON: serializa `$data` y fija la cabecera `Content-Type: application/json`.
- put() : self
- Crea una petición PUT; el cuerpo se construye igual que en POST.
- saveAs() : bool
- Guarda el cuerpo de la respuesta en `$filename`.
- setBearerToken() : self
- Añade una cabecera `Authorization: Bearer <token>` para autenticación OAuth/JWT.
- setCurlOption() : self
- Sobrescribe directamente una opción de cURL (constante `CURLOPT_*`). Usar con cuidado.
- setHeader() : self
- Define una cabecera de la petición.
- setHeaders() : self
- Sustituye por completo el conjunto de cabeceras de la petición.
- setTimeout() : self
- Establece el timeout total de la petición en segundos (atajo de `CURLOPT_TIMEOUT`).
- setToken() : self
- Añade una cabecera `Token: <token>` (autenticación específica de algunas APIs internas).
- setUser() : self
- Configura autenticación HTTP Basic mediante `CURLOPT_USERPWD`.
- setUserAgent() : self
- Sustituye el User-Agent por defecto (que es `FacturaScripts <version>`).
- status() : int
- Devuelve el código HTTP de la respuesta. Ejecuta la petición si aún no se había hecho.
- exec() : void
- Ejecuta la petición cURL y rellena `body`, `statusCode`, `error` y `responseHeaders`.
- getPostFields() : mixed
- Prepara el cuerpo a enviar para POST/PUT/PATCH según el Content-Type configurado.
Properties
$error
Mensaje de error devuelto por `curl_error()`, vacío si no hubo fallo a nivel de transporte.
public
mixed
$error
@var string
$body
Cuerpo crudo de la respuesta tras `exec()`.
protected
mixed
$body
@var string
$data
Datos a enviar: array (se codifica según método y Content-Type) o string en bruto.
protected
mixed
$data
@var mixed
$method
Método HTTP de la petición (GET, POST, PUT, PATCH, DELETE).
protected
mixed
$method
@var string
$url
URL destino. Para GET/DELETE con `$data` array, los parámetros se añaden como query string al ejecutar.
protected
mixed
$url
@var string
$curlOptions
Mapa de opciones cURL que se aplicarán a la petición.
private
mixed
$curlOptions
@var array
$executed
Indica si la petición ya se ha ejecutado, para evitar dispararla varias veces.
private
mixed
$executed
= false
@var bool
$headers
Cabeceras de la petición saliente, ya formateadas como `"Clave: Valor"`.
private
mixed
$headers
= []
@var array
$responseHeaders
Cabeceras de respuesta indexadas en minúsculas, cada una con sus valores como array.
private
mixed
$responseHeaders
= []
@var array
$statusCode
Código HTTP de respuesta. 0 mientras no se haya ejecutado la petición.
private
mixed
$statusCode
= 0
@var int
Methods
__construct()
Construye una petición. Pensado para uso interno: en el código cliente, prefiérense los factories estáticos (`Http::get()`, `Http::post()`, ...) que dejan el método explícito.
public
__construct(string $method, string $url[, mixed $data = [] ]) : mixed
Parameters
- $method : string
-
método HTTP en mayúsculas
- $url : string
-
URL destino
- $data : mixed = []
-
array de campos o string en bruto a enviar
body()
Devuelve el cuerpo crudo de la respuesta, ejecutando la petición si aún no se había hecho.
public
body() : string
Return values
stringdelete()
Crea una petición DELETE. Si `$data` es array, sus claves se añaden como query string en la URL (DELETE no lleva cuerpo). Si es string, se envía la URL tal cual y se ignora el dato.
public
static delete(string $url[, mixed $data = [] ]) : self
Parameters
- $url : string
- $data : mixed = []
Return values
selferrorMessage()
Devuelve el mensaje de error de cURL (cadena vacía si no hubo error). Ejecuta la petición si hace falta.
public
errorMessage() : string
Return values
stringfailed()
Atajo de `!ok()`: true si la petición no terminó con un código 200/201/202.
public
failed() : bool
Return values
boolget()
Crea una petición GET. Si `$data` es un array no vacío, se concatena como query string a la URL al ejecutar la petición.
public
static get(string $url[, mixed $data = [] ]) : self
Parameters
- $url : string
- $data : mixed = []
Return values
selfheader()
Devuelve el primer valor de la cabecera de respuesta `$key` (case-insensitive), o cadena vacía si no existe.
public
header(string $key) : string
Si la cabecera apareció varias veces, se devuelve solo la primera ocurrencia. Para
obtenerlas todas, usar headers().
Parameters
- $key : string
Return values
stringheaders()
Devuelve todas las cabeceras de respuesta indexadas en minúsculas.
public
headers() : array<string|int, mixed>
Cada clave apunta a un array con todos los valores recibidos para esa cabecera (las que aparecen una sola vez se devuelven igualmente como array de un elemento).
Return values
array<string|int, mixed>json()
Decodifica el cuerpo de la respuesta como JSON.
public
json([bool $associative = true ]) : mixed
Si el cuerpo no es JSON válido, json_decode devuelve null sin lanzar excepción; el
llamador es responsable de comprobar el resultado.
Parameters
- $associative : bool = true
-
true (por defecto) para arrays asociativos, false para objetos
notFound()
True si la respuesta tiene código 404. Ejecuta la petición si aún no se había ejecutado.
public
notFound() : bool
Return values
boolok()
True si la respuesta tiene código 200, 201 o 202.
public
ok() : bool
Otros 2xx (204 No Content, 206 Partial Content...) y todos los 3xx/4xx/5xx se consideran
fallo. Si tu integración necesita una interpretación distinta, usa status() directamente.
Return values
boolpatch()
Crea una petición PATCH; el cuerpo se construye igual que en POST.
public
static patch(string $url[, mixed $data = [] ]) : self
Parameters
- $url : string
- $data : mixed = []
Return values
selfpost()
Crea una petición POST. Si `$data` es array, se enviará como `application/x-www-form-urlencoded` salvo que se establezca un Content-Type distinto (multipart/form-data envía el array tal cual).
public
static post(string $url[, mixed $data = [] ]) : self
Parameters
- $url : string
- $data : mixed = []
Return values
selfpostJson()
Atajo para POST con cuerpo JSON: serializa `$data` y fija la cabecera `Content-Type: application/json`.
public
static postJson(string $url[, array<string|int, mixed> $data = [] ]) : self
Parameters
- $url : string
- $data : array<string|int, mixed> = []
Return values
selfput()
Crea una petición PUT; el cuerpo se construye igual que en POST.
public
static put(string $url[, mixed $data = [] ]) : self
Parameters
- $url : string
- $data : mixed = []
Return values
selfsaveAs()
Guarda el cuerpo de la respuesta en `$filename`.
public
saveAs(string $filename) : bool
Sólo escribe si el código de respuesta es exactamente 200; para 201/202 no guarda nada y
devuelve false. Devuelve también false si file_put_contents falla.
Parameters
- $filename : string
Return values
boolsetBearerToken()
Añade una cabecera `Authorization: Bearer <token>` para autenticación OAuth/JWT.
public
setBearerToken(string $token) : self
Parameters
- $token : string
Return values
selfsetCurlOption()
Sobrescribe directamente una opción de cURL (constante `CURLOPT_*`). Usar con cuidado.
public
setCurlOption(int $option, mixed $value) : self
Parameters
- $option : int
- $value : mixed
Return values
selfsetHeader()
Define una cabecera de la petición.
public
setHeader(string $key, string $value) : self
Internamente se almacena ya formateada ("Clave: Valor") e indexada por el nombre original
de la cabecera, por lo que llamar dos veces con la misma clave (mismo case) sustituye el
valor anterior, pero usar otro case crearía una entrada distinta.
Parameters
- $key : string
- $value : string
Return values
selfsetHeaders()
Sustituye por completo el conjunto de cabeceras de la petición.
public
setHeaders(array<string|int, mixed> $headers) : self
Espera el array ya en el formato interno (["Clave" => "Clave: Valor"]); si vas a fijarlas
una a una, usa setHeader().
Parameters
- $headers : array<string|int, mixed>
Return values
selfsetTimeout()
Establece el timeout total de la petición en segundos (atajo de `CURLOPT_TIMEOUT`).
public
setTimeout(int $timeout) : self
Parameters
- $timeout : int
Return values
selfsetToken()
Añade una cabecera `Token: <token>` (autenticación específica de algunas APIs internas).
public
setToken(string $token) : self
Parameters
- $token : string
Return values
selfsetUser()
Configura autenticación HTTP Basic mediante `CURLOPT_USERPWD`.
public
setUser(string $user, string $password) : self
Parameters
- $user : string
- $password : string
Return values
selfsetUserAgent()
Sustituye el User-Agent por defecto (que es `FacturaScripts <version>`).
public
setUserAgent(string $userAgent) : self
Parameters
- $userAgent : string
Return values
selfstatus()
Devuelve el código HTTP de la respuesta. Ejecuta la petición si aún no se había hecho.
public
status() : int
Return values
intexec()
Ejecuta la petición cURL y rellena `body`, `statusCode`, `error` y `responseHeaders`.
protected
exec() : void
Se invoca de forma perezosa la primera vez que se llama a un getter; las llamadas
posteriores no relanzan la petición porque el flag executed queda a true incluso si
cURL devuelve error. Las cabeceras de respuesta se capturan mediante CURLOPT_HEADERFUNCTION
y se indexan en minúsculas, almacenando todos los valores cuando una cabecera aparece varias
veces (típico en Set-Cookie).
getPostFields()
Prepara el cuerpo a enviar para POST/PUT/PATCH según el Content-Type configurado.
protected
getPostFields() : mixed
Si la cabecera Content-Type es multipart/form-data, se devuelven los datos sin codificar
para que cURL construya el cuerpo multipart automáticamente (necesario para subir ficheros
con CURLFile). Si no, los arrays se codifican con http_build_query y los strings se
envían tal cual (caso típico al enviar JSON ya serializado, como hace postJson()).