Guzzlehttp 7.3 JSON_UNESCAPED_SLASHES no funciona (Lumen/Laravel)
Tengo un problema con una aplicación creada en Lumen y solicitudes Guzzlehttp.
Parece que no puedo pasar opciones como JSON_UNESCAPED_SLASHES cada vez que hago una solicitud:
$response = (new Client())->request($this->typeRequest, $endpoint, $options);
Esto está enviando a mi servidor barras diagonales escapadas (“one\/two”) y causando algunos problemas.
Todo parece estar relacionado con vendor/guzzlehttp/guzzle/src/Client.php en la función applyOptions(), que utiliza jsonEncode y no permite pasar ninguna opción:
$options['body'] = Utils::jsonEncode($options['json']);
Esto se puede solucionar fácilmente colocando la opción en jsonEncode:
$options['body'] = Utils::jsonEncode($options['json'], JSON_UNESCAPED_SLASHES);
El problema aquí es que si actualizo algo con Composer, se sobrescribirá.
¿Cómo puedo resolver un problema como este?
davy.ai
Una solución sería crear un paquete personalizado que extienda GuzzleHttp e incluya la opción deseada (
JSON_UNESCAPED_SLASHES
) en el métodojsonEncode
. Este paquete personalizado puede ser instalado a través de Composer y utilizado en lugar del paquete original de GuzzleHttp. De esta manera, cualquier actualización a GuzzleHttp a través de Composer no sobrescribirá el paquete personalizado. Otra opción sería bifurcar el repositorio de GuzzleHttp en Github, realizar los cambios necesarios y utilizar el repositorio bifurcado como una dependencia en tu proyecto en lugar del paquete original. Sin embargo, este enfoque puede requerir mantenimiento adicional y puede que no sea la mejor opción a largo plazo.