La differenza nelle richieste cURL e WordPress
cURL è una libreria PHP molto popolare a cui ho fatto riferimento in diversi post altri post (1 e 2, per esempio). Ed è uno che penso dovrebbe essere esaminato, esplorato e possibilmente utilizzato da chiunque lavori in PHP (sì, anche quelli che lavorano in WordPress).
Ma grazie alle API native di WordPress, abbiamo un livello di astrazione che ci consente di ottenere gran parte della stessa funzionalità (se non la stessa funzionalità).
Nello specifico, sto parlando di wp_safe_remote_get.
Questa funzione è ideale quando la richiesta HTTP viene inviata a un URL arbitrario. L’URL viene convalidato per evitare il reindirizzamento e richiedere attacchi di falsificazione.
Cito specificamente la variante sicura di questa funzione per la definizione di cui sopra (c’è un’altra variante, ma è importante prendere precauzioni contro URL arbitrari per motivi di sicurezza).
cURL e richieste di WordPress
Ad ogni modo, quindi come potrebbe essere una funzione se dovessimo utilizzare questa libreria 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
);
}
In breve (e questo è tipico per la maggior parte delle richieste cURL):
- inizializzare la libreria cURL,
- impostare opzioni specifiche per la tua richiesta (che varieranno in base a tale richiesta),
- fare la richiesta,
- valutare la risposta
- cogliere le eccezioni necessarie.
E poi se dovessimo utilizzare la stessa variazione del codice in WordPress?
<?php
$response = wp_safe_remote_get($url);
if (is_wp_error($response)) {
return '';
}
$response = $response['body'];
Questo è molto più piccolo e probabilmente più facile da leggere (almeno per coloro che lavorano in WordPress). In termini di argomenti, inoltre, non sto passando nulla nella funzione oltre all’URL.
Se leggi la documentazione dell’API collegata, vedrai che abbiamo un certo controllo su questo; tuttavia, varierà a seconda di come è necessario comunicare con un determinato endpoint.
Inoltre, dipende da te il modo in cui gestisci WP_Error. Restituire una stringa vuota è raramente l’opzione migliore; tuttavia, ai fini di questo esempio, è sufficiente. Il caso che stiamo principalmente cercando è il corpo della risposta e questo è il fulcro del codice.
Quando usiamo l’uno o l’altro?
Quando si tratta di lavorare con le richieste remote cURL e WordPress e di determinare quale metodo utilizzare, tendo a seguire questa regola:
- Se ciò di cui ho bisogno può essere ottenuto con una funzione API di WordPress, la uso.
- In caso contrario, userò cURL.
Non posso fornire una regola più solida.
Invece, guarda l’endpoint con cui stai comunicando, determina il livello di controllo di cui hai bisogno sulla richiesta e prendi una decisione su come vuoi gestire la risposta.
Da lì, dovresti avere una buona idea su quale libreria usare.
