La diferencia en las solicitudes cURL y WordPress
cURL es una biblioteca PHP muy popular a la que he hecho referencia en varias publicaciones (1 y 2, por ejemplo). Y es uno que creo que debería ser revisado, explorado y posiblemente utilizado por cualquiera que trabaje en PHP (sí, incluso aquellos que trabajan en WordPress).
Pero debido a las API nativas de WordPress, tenemos un nivel de abstracción que nos permite lograr gran parte de la misma funcionalidad (si no la misma funcionalidad).
Específicamente, estoy hablando de wp_safe_remote_get.
Esta función es ideal cuando la solicitud HTTP se realiza a una URL arbitraria. La URL se valida para evitar redirección y solicitar ataques de falsificación.
Menciono específicamente la variante segura de esta función para la definición anterior (hay otra variante, pero es importante tomar precauciones contra las URL arbitrarias por razones de seguridad).
cURL y solicitudes de WordPress
De todos modos, entonces, ¿cómo se vería una función si tuviéramos que usar esta biblioteca cURL?
<?php
try {
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($curl);
if (is_object($response)) {
return false;
}
if (false === $response) {
throw new Exception(curl_error($curl), curl_errno($curl));
}
curl_close($curl);
} catch (Exception $e) {
trigger_error(
sprintf(
'Curl failed with error #%d: %s',
$e->getCode(),
$e->getMessage()
),
E_USER_ERROR
);
}
En resumen (y esto es típico para la mayoría de las solicitudes cURL):
- inicializar la biblioteca cURL,
- establecer opciones específicas para su solicitud (que variarán en función de dicha solicitud),
- hacer la solicitud,
- evaluar la respuesta
- capturar las excepciones necesarias.
¿Y si tuviéramos que usar la misma variación del código en WordPress?
<?php
$response = wp_safe_remote_get($url);
if (is_wp_error($response)) {
return '';
}
$response = $response['body'];
Esto es mucho más pequeño y posiblemente más fácil de leer (al menos para aquellos que trabajan en WordPress). En términos de argumentos, tampoco estoy pasando nada a la función que no sea la URL.
Si lee la documentación de la API vinculada, verá que tenemos cierto control sobre eso; sin embargo, variará dependiendo de cómo necesite comunicarse con un punto final determinado.
Además, la forma en que maneja el WP_Error depende de usted. Devolver una cadena vacía rara vez es la mejor opción; sin embargo, a los efectos de este ejemplo, es suficiente. El caso que buscamos principalmente es el cuerpo de la respuesta y ese es el enfoque del código.
¿Cuándo usamos uno u otro?
Cuando se trata de trabajar con solicitudes remotas cURL y WordPress y determinar qué método usar, tiendo a seguir esta regla:
- Si lo que necesito se puede lograr con una función API de WordPress, la uso.
- Si no, usaré cURL.
No puedo proporcionar una regla más sólida.
En su lugar, mire el punto final que está comunicando, determine qué nivel de control necesita sobre la solicitud y tome una decisión sobre cómo desea manejar la respuesta.
A partir de ahí, debería tener una buena idea de qué biblioteca usar.
