{"id":229660,"date":"2022-10-31T20:06:00","date_gmt":"2022-10-31T17:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229660"},"modified":"2022-11-09T15:49:19","modified_gmt":"2022-11-09T12:49:19","slug":"cosa-significa-utilizzare-wordpress-come-proxy","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/cosa-significa-utilizzare-wordpress-come-proxy\/","title":{"rendered":"Cosa significa utilizzare WordPress come proxy?"},"content":{"rendered":"\n<p>Se hai lavorato con WordPress per un certo periodo di tempo, specialmente quando si tratta di utilizzare qualche tipo di funzionalit\u00e0 Ajax, probabilmente a un certo punto avrai sentito la frase &quot;usa WordPress come proxy&quot;.<\/p>\n<p>E anche se non hai le probabilit\u00e0 di averlo effettivamente fatto sono piuttosto alte.<\/p>\n<p>Anche se penso che, con il passare del tempo, alla fine vedremo l&#8217;API REST sostituire i modi tradizionali in cui abbiamo utilizzato Ajax, ma probabilmente \u00e8 una storia diversa per un&#8217;altra volta.<\/p>\n<p>Quindi cosa significa usare WordPress come proxy ogni volta che lavori con richieste Ajax? Richiede un po&#8217; di comprensione delle richieste tra siti, come funziona l&#8217;instradamento di una richiesta tramite WordPress e quindi l&#8217;analisi della risposta.<\/p>\n<h2>Usa WordPress come proxy<\/h2>\n<p>\u00c8 un post un po&#8217; lungo, vero? Invece, cercher\u00f2 di scomporlo in termini pi\u00f9 brevi in \u200b\u200bmodo che tu possa leggerlo e poi tornare al lavoro.<\/p>\n<h3>Come procuratore<\/h3>\n<p>Innanzitutto, prendi <a href=\"https:\/\/www.google.com\/search?q=define%3A+proxy&#038;oq=define%3A+proxy&#038;aqs=chrome..69i57j69i58.1706j0j7&#038;sourceid=chrome&#038;ie=UTF-8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la definizione di proxy<\/a> :<\/p>\n<blockquote>\n<p>l&#8217;autorit\u00e0 di rappresentare qualcun altro, soprattutto nel voto<\/p>\n<\/blockquote>\n<p>Se fai clic sul collegamento sopra, noterai che ci sono alcune altre definizioni ma nessuna di esse \u00e8 davvero sufficiente. Invece, mi piace pensarli un po&#8217; pi\u00f9 in astratto, almeno per quanto riguarda il software.<\/p>\n<p>Ai fini di questo post, diciamo che WordPress \u00e8 un proxy per una richiesta, il che significa che \u00e8 responsabile di fungere da intermediario tra l&#8217;inizio della richiesta e la risposta ad essa.<\/p>\n<p>In breve,<\/p>\n<blockquote>\n<p>WordPress funge da proxy instradando una richiesta a un altro servizio e catturandone la risposta.<\/p>\n<\/blockquote>\n<p>Forse hai sentito qualcosa di simile, forse no. Indipendentemente da ci\u00f2, ecco come potrebbe apparire ad alto livello:<\/p>\n<p>Ora, quando devi fare una richiesta asincrona (o una richiesta Ajax come user\u00f2 nel resto di questo post), hai una delle due opzioni:<\/p>\n<ol>\n<li>effettuare la richiesta a una pagina esistente all&#8217;interno di WordPress,<\/li>\n<li>effettuare la richiesta a una pagina che esiste su un altro dominio.<\/li>\n<\/ol>\n<p>Se stai facendo richieste a pagine che esistono all&#8217;interno della tua app (leggi: all&#8217;interno di WordPress), non avrai problemi.<\/p>\n<h3>Sulla sicurezza delle richieste<\/h3>\n<p>Ma fare richieste Ajax al di fuori del tuo dominio non \u00e8 possibile. Questo perch\u00e9 ha lo scopo di proteggere <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-site_Scripting_(XSS)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">XSS<\/a> e <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-Site_Request_Forgery_(CSRF)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CSRF<\/a>.<\/p>\n<p>In breve, ciascuno di questi si riferisce rispettivamente a quanto segue:<\/p>\n<blockquote>\n<p>Gli attacchi XSS si verificano quando un utente malintenzionato utilizza un&#8217;applicazione Web per inviare codice dannoso, generalmente sotto forma di script lato browser, a un utente finale diverso<\/p>\n<\/blockquote>\n<p>e:<\/p>\n<blockquote>\n<p>Cross-Site Request Forgery (CSRF) \u00e8 un attacco che costringe un utente finale a eseguire azioni indesiderate su un&#8217;applicazione Web in cui \u00e8 attualmente autenticato.<\/p>\n<\/blockquote>\n<p>Questo, in breve, \u00e8 il motivo per cui dobbiamo usare WordPress come proxy. Naturalmente, per\u00f2, questo solleva la domanda su come?<\/p>\n<h3>Utilizzo di WordPress come proxy<\/h3>\n<p>Per fare ci\u00f2, avrai bisogno di diverse cose:<\/p>\n<ol>\n<li>\u00a0una pagina che la tua richiesta Ajax pu\u00f2 interrogare,<\/li>\n<li>una funzione per catturare la richiesta ajax e inviarla all&#8217;URL corretto,<\/li>\n<li>un modo per il lato server di analizzare la risposta,<\/li>\n<li>una funzione per restituire i dati alla funzione Ajax originale.<\/li>\n<\/ol>\n<p>Ancora una volta, per motivi di spazio, non fornir\u00f2 un esempio approfondito di questo, ma dovrebbe essere sufficiente per iniziare.<\/p>\n<p>Innanzitutto, devi assicurarti di avere una funzione impostata per catturare la tua richiesta Ajax. C&#8217;\u00e8 gi\u00e0 molta documentazione su questo nel Codex. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-01_get_columns-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Un semplice esempio<\/a> di questo sarebbe simile a questo:<\/p>\n<pre><code>var _get_columns = function() {\n\n    \/\/ Don't forget to use a nonce or security value here.\n    var data = {\n        'action':   'get_all_columns'\n            'security': '&lt;?php echo wp_create_nonce( \"acme-security-ajax-nonce\" ); ?&gt;'\n    };\n\n    \/\/ TODO Check for error logging if the response value doesn't exist.\n    $.get( ajaxurl, data, function( response) {\n\n        response = $.parseJSON( response );\n        \/\/ Your custom functionality here\n    });\n};\n<\/code><\/pre>\n<p>Successivamente, hai bisogno di una pagina sul server per effettuare una richiesta all&#8217;URL che contiene i tuoi dati. Questo potrebbe essere fatto usando <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a>, questo potrebbe essere fatto usando <a href=\"https:\/\/php.net\/manual\/en\/function.file-get-contents.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_get_contents<\/a> e questo potrebbe essere fatto con altri mezzi.<\/p>\n<p>Poich\u00e9 non so n\u00e9 voglio fornire un esempio prescrittivo, condivider\u00f2 una demo molto semplice di come potrebbe funzionare (<a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-02-wp_ajax_get_all_data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">almeno nelle fasi iniziali<\/a> ):<\/p>\n<pre><code>&lt;?php\n\nadd_action( 'wp_ajax_get_all_data', 'get_all_data' );\n\/**\n * Retrieves the requested data from the specified URL \n * returns the values in JSON.\n *\/\nfunction get_all_data() {\n\n  \/\/ Note $url is up to you.\n  $curl = curl_init( $url );\n\n  curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );                         \n  curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY );                    \n  curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );                          \n  curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );                           \n\n  $response     = curl_exec( $curl );                                          \n  $resultStatus = curl_getinfo( $curl );                                   \n\n  if( 200 !== $resultStatus['http_code']) {\n    echo 'Call Failed '.print_r( $result_status );                         \n  }\n  curl_close( $curl );\n\n  echo json_encode( utf8_encode( $response) ); \n  wp_die();\n}\n<\/code><\/pre>\n<p>Quando ricevi una risposta, puoi scegliere di analizzarla sul lato server (cosa che consiglio) e restituirla utilizzando un formato leggero alla funzione JavaScript originale come visto sopra. Nota che sto usando <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> nel codice sopra.<\/p>\n<p>Da l\u00ec, puoi quindi fare tutto ci\u00f2 che devi fare sulla pagina in questione con i dati che hai. Si noti che le informazioni sono contenute nell&#8217;oggetto risposta e potrebbe essere necessario ispezionare ci\u00f2 che contiene per gestirlo correttamente. Ci\u00f2 viene realizzato e viene illustrato nel codice sopra.<\/p>\n<p>Ma i dettagli di questo dipenderanno fortemente da ci\u00f2 che stai cercando di ottenere.<\/p>\n<h2>WordPress come proxy<\/h2>\n<p>In definitiva, il flusso di controllo \u00e8 simile a questo:<\/p>\n<p>Il punto di tutto quanto sopra \u00e8 aiutare a fornire un po &#8216;di background sul motivo per cui potresti vedere parte del codice che fai e perch\u00e9 devi strutturare il tuo codice in questo modo.<\/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>Quindi cosa significa usare WordPress come proxy ogni volta che lavori con richieste Ajax? Dai un&#8217;occhiata a questi esempi.<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,720,844,865],"tags":[1168],"class_list":["post-229660","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229660","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=229660"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229660\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}