{"id":228984,"date":"2022-10-31T20:14:00","date_gmt":"2022-10-31T17:14:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228984"},"modified":"2022-11-09T05:04:01","modified_gmt":"2022-11-09T02:04:01","slug":"que-significa-usar-wordpress-como-proxy","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/que-significa-usar-wordpress-como-proxy\/","title":{"rendered":"\u00bfQu\u00e9 significa usar WordPress como proxy?"},"content":{"rendered":"\n<p>Si ha trabajado con WordPress durante alg\u00fan tiempo, especialmente cuando se trata de usar alg\u00fan tipo de funcionalidad Ajax, es probable que haya escuchado la frase &quot;usar WordPress como proxy&quot; en alg\u00fan momento.<\/p>\n<p>E incluso si no lo has hecho, las probabilidades de que realmente lo hayas hecho son bastante altas.<\/p>\n<p>Aunque creo que, a medida que avanza el tiempo, finalmente veremos que la API REST reemplaza las formas tradicionales en que hemos usado Ajax, pero es probable que esa sea una historia diferente para otro momento.<\/p>\n<p>Entonces, \u00bfqu\u00e9 significa usar WordPress como proxy cada vez que trabaja con solicitudes de Ajax? Requiere un poco de comprensi\u00f3n de las solicitudes entre sitios, c\u00f3mo funciona el enrutamiento de una solicitud a trav\u00e9s de WordPress y luego analizar la respuesta.<\/p>\n<h2>Usar WordPress como proxy<\/h2>\n<p>Esa es una publicaci\u00f3n un poco larga, \u00bfno? En cambio, intentar\u00e9 dividirlo en t\u00e9rminos m\u00e1s cortos para que pueda leerlo y luego volver al trabajo.<\/p>\n<h3>como representante<\/h3>\n<p>Primero, tome <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 definici\u00f3n de un proxy<\/a> :<\/p>\n<blockquote>\n<p>la autoridad para representar a otra persona, especialmente en la votaci\u00f3n<\/p>\n<\/blockquote>\n<p>Si hace clic en el enlace anterior, notar\u00e1 que hay algunas otras definiciones, pero ninguna de ellas es realmente suficiente. En cambio, me gusta pensar en ellos un poco m\u00e1s en abstracto, al menos en lo que respecta al software.<\/p>\n<p>Para los prop\u00f3sitos de esta publicaci\u00f3n, digamos que WordPress es un proxy para una solicitud, lo que significa que es responsable de servir como intermediario entre el inicio de la solicitud y la respuesta a la misma.<\/p>\n<p>En breve,<\/p>\n<blockquote>\n<p>WordPress sirve como proxy al enrutar una solicitud a otro servicio y capturar su respuesta.<\/p>\n<\/blockquote>\n<p>Tal vez hayas escuchado algo similar, tal vez no. Independientemente, as\u00ed es como podr\u00eda verse a un alto nivel:<\/p>\n<p>Ahora, cuando necesite realizar una solicitud as\u00edncrona (o una solicitud Ajax como usar\u00e9 en el resto de esta publicaci\u00f3n), entonces tiene una de dos opciones:<\/p>\n<ol>\n<li>hacer la solicitud a una p\u00e1gina que existe dentro de WordPress,<\/li>\n<li>haga la solicitud a una p\u00e1gina que existe en el otro dominio.<\/li>\n<\/ol>\n<p>Si realiza solicitudes a p\u00e1ginas que existen dentro de su aplicaci\u00f3n (l\u00e9ase: dentro de WordPress), no tendr\u00e1 ning\u00fan problema.<\/p>\n<h3>Sobre la seguridad de las solicitudes<\/h3>\n<p>Pero hacer solicitudes de Ajax fuera de su propio dominio es imposible. Esto se debe a que est\u00e1 destinado a proteger <a href=\"https:\/\/www.owasp.org\/index.php\/Cross-site_Scripting_(XSS)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">XSS<\/a> y <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>En resumen, cada uno de estos se refiere a lo siguiente, respectivamente:<\/p>\n<blockquote>\n<p>Los ataques XSS ocurren cuando un atacante usa una aplicaci\u00f3n web para enviar c\u00f3digo malicioso, generalmente en forma de un script del lado del navegador, a un usuario final diferente.<\/p>\n<\/blockquote>\n<p>y:<\/p>\n<blockquote>\n<p>La falsificaci\u00f3n de solicitud entre sitios (CSRF) es un ataque que obliga a un usuario final a ejecutar acciones no deseadas en una aplicaci\u00f3n web en la que est\u00e1 autenticado actualmente.<\/p>\n<\/blockquote>\n<p>En resumen, es por eso que necesitamos usar WordPress como proxy. Naturalmente, sin embargo, esto plantea la pregunta de \u00bfc\u00f3mo?<\/p>\n<h3>Usar WordPress como un proxy<\/h3>\n<p>Para hacer esto, necesitar\u00e1s varias cosas:<\/p>\n<ol>\n<li>\u00a0una p\u00e1gina que su solicitud de Ajax puede consultar,<\/li>\n<li>una funci\u00f3n para capturar la solicitud ajax y enviarla a la URL adecuada,<\/li>\n<li>una forma para que el lado del servidor analice la respuesta,<\/li>\n<li>una funci\u00f3n para devolver los datos a la funci\u00f3n Ajax original.<\/li>\n<\/ol>\n<p>Una vez m\u00e1s, por razones de espacio, no proporcionar\u00e9 un ejemplo detallado de esto, pero deber\u00eda ser suficiente para comenzar.<\/p>\n<p>Primero, debe asegurarse de tener una funci\u00f3n configurada para capturar su solicitud de Ajax. Ya hay mucha documentaci\u00f3n sobre esto en el Codex. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-01_get_columns-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Un ejemplo simple<\/a> de esto se ver\u00eda as\u00ed:<\/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>A continuaci\u00f3n, necesita una p\u00e1gina en el servidor para realizar una solicitud a la URL que tiene sus datos. Esto se puede hacer usando <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a>, esto se puede hacer 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>, y esto se puede hacer a trav\u00e9s de otros medios.<\/p>\n<p>Como no s\u00e9 ni quiero proporcionar un ejemplo prescriptivo, compartir\u00e9 una demostraci\u00f3n muy simple de c\u00f3mo podr\u00eda funcionar esto (<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\">al menos en las primeras etapas<\/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>Cuando recibe una respuesta, puede optar por analizarla en el lado del servidor (lo que recomiendo) y devolverla usando un formato ligero a la funci\u00f3n de JavaScript original como se ve arriba. Tenga en cuenta que estoy usando <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> en el c\u00f3digo anterior.<\/p>\n<p>A partir de ah\u00ed, puede hacer lo que sea necesario en la p\u00e1gina en cuesti\u00f3n con los datos que tiene. Tenga en cuenta que la informaci\u00f3n est\u00e1 contenida en el objeto de respuesta y es posible que deba inspeccionar lo que contiene para manejarlo correctamente. Esto se logra y se demuestra en el c\u00f3digo anterior.<\/p>\n<p>Pero los detalles de esto depender\u00e1n en gran medida de lo que est\u00e9 buscando lograr.<\/p>\n<h2>WordPress como proxy<\/h2>\n<p>En \u00faltima instancia, el flujo de control se parece a esto:<\/p>\n<p>El objetivo de todo lo anterior es ayudar a proporcionar un poco de informaci\u00f3n sobre por qu\u00e9 puede ver parte del c\u00f3digo que hace y por qu\u00e9 necesita estructurar su c\u00f3digo de esta manera.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Entonces, \u00bfqu\u00e9 significa usar WordPress como proxy cada vez que trabaja con solicitudes de Ajax? Mira estos ejemplos.<\/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":[892,716,914,840,861],"tags":[1172],"class_list":["post-228984","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228984"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228984\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}