{"id":231965,"date":"2022-12-28T18:57:00","date_gmt":"2022-12-28T15:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231965"},"modified":"2022-12-28T18:59:22","modified_gmt":"2022-12-28T15:59:22","slug":"la-differenza-nelle-richieste-curl-e-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/la-differenza-nelle-richieste-curl-e-wordpress\/","title":{"rendered":"La differenza nelle richieste cURL e WordPress"},"content":{"rendered":"\n<p><a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a> \u00e8 una libreria PHP molto popolare a cui ho fatto riferimento in diversi post altri post (<a href=\"https:\/\/wordpress.mediadoma.com\/it\/utilizzo-di-curl-per-determinare-se-lurl-specificato-e-una-pagina-valida\/\" title=\"1\">1<\/a> e <a href=\"https:\/\/wordpress.mediadoma.com\/it\/trovare-la-destinazione-di-un-reindirizzamento-con-php\/\" title=\"2\">2<\/a>, per esempio). Ed \u00e8 uno che penso dovrebbe essere esaminato, esplorato e possibilmente utilizzato da chiunque lavori in PHP (s\u00ec, anche quelli che lavorano in WordPress).<\/p>\n<p>Ma grazie alle API native di WordPress, abbiamo un livello di astrazione che ci consente di ottenere gran parte della stessa funzionalit\u00e0 (se non la stessa funzionalit\u00e0).<\/p>\n<p>Nello specifico, sto parlando di <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_safe_remote_get<\/a>.<\/p>\n<blockquote><p>\n<a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" alt=\"La differenza nelle richieste cURL e WordPress\"><\/a><\/p>\n<p>Questa funzione \u00e8 ideale quando la richiesta HTTP viene inviata a un URL arbitrario. L&#8217;URL viene convalidato per evitare il reindirizzamento e richiedere attacchi di falsificazione.<\/p>\n<\/blockquote>\n<p>Cito specificamente la variante sicura di <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questa funzione<\/a> per la definizione di cui sopra (c&#8217;\u00e8 un&#8217;altra variante, ma \u00e8 importante prendere precauzioni contro URL arbitrari per motivi di sicurezza).<\/p>\n<h2>cURL e richieste di WordPress<\/h2>\n<p>Ad ogni modo, quindi come potrebbe essere <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-00-get-curl-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una funzione<\/a> se dovessimo utilizzare questa libreria cURL?<\/p>\n<pre><code>&lt;?php\n\ntry {\n    $curl = curl_init();\n    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');\n    curl_setopt($curl, CURLOPT_URL, $url);\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);\n    $response = curl_exec($curl);\n\n    if (is_object($response)) {\n        return false;\n    }\n\n    if (false === $response) {\n        throw new Exception(curl_error($curl), curl_errno($curl));\n    }\n\n    curl_close($curl);\n} catch (Exception $e) {\n    trigger_error(\n        sprintf(\n            'Curl failed with error #%d: %s',\n            $e-&gt;getCode(),\n            $e-&gt;getMessage()\n        ),\n        E_USER_ERROR\n    );\n}<\/code><\/pre>\n<p>In breve (e questo \u00e8 tipico per la maggior parte delle richieste cURL):<\/p>\n<ul>\n<li>inizializzare la libreria cURL,<\/li>\n<li><a href=\"https:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">impostare opzioni<\/a> specifiche per la tua richiesta (che varieranno in base a tale richiesta),<\/li>\n<li>fare la richiesta,<\/li>\n<li>valutare la risposta<\/li>\n<li>cogliere le eccezioni necessarie.<\/li>\n<\/ul>\n<p>E poi se dovessimo utilizzare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-01-safe-remote-get-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la stessa variazione del codice<\/a> in WordPress?<\/p>\n<pre><code>&lt;?php\n\n$response = wp_safe_remote_get($url);\nif (is_wp_error($response)) {\n    return '';\n}\n$response = $response['body'];<\/code><\/pre>\n<p>Questo \u00e8 molto pi\u00f9 piccolo e probabilmente pi\u00f9 facile da leggere (almeno per coloro che lavorano in WordPress). In termini di argomenti, inoltre, non sto passando nulla nella funzione oltre all&#8217;URL.<\/p>\n<p>Se leggi la documentazione dell&#8217;API collegata, vedrai che abbiamo un certo controllo su questo; tuttavia, varier\u00e0 a seconda di come \u00e8 necessario comunicare con un determinato endpoint.<\/p>\n<p>Inoltre, dipende da te il modo in cui <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gestisci WP_Error<\/a>. Restituire una stringa vuota \u00e8 raramente l&#8217;opzione migliore; tuttavia, ai fini di questo esempio, \u00e8 sufficiente. Il caso che stiamo principalmente cercando \u00e8 il corpo della risposta e questo \u00e8 il fulcro del codice.<\/p>\n<h2>Quando usiamo l&#8217;uno o l&#8217;altro?<\/h2>\n<p>Quando si tratta di lavorare con le richieste remote cURL e WordPress e di determinare quale metodo utilizzare, tendo a seguire questa regola:<\/p>\n<ul>\n<li>Se ci\u00f2 di cui ho bisogno pu\u00f2 essere ottenuto con una funzione API di WordPress, la uso.<\/li>\n<li>In caso contrario, user\u00f2 cURL.<\/li>\n<\/ul>\n<p>Non posso fornire una regola pi\u00f9 solida.<\/p>\n<p>Invece, guarda l&#8217;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.<\/p>\n<p>Da l\u00ec, dovresti avere una buona idea su quale libreria usare.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>cURL e le richieste remote di WordPress ci consentono gran parte delle stesse funzionalit\u00e0. Ma dobbiamo essere in grado di determinare quale opzione \u00e8 la migliore.<\/p>\n","protected":false},"author":1,"featured_media":237087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,720,844],"tags":[1168],"class_list":["post-231965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231965"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/237087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}