{"id":229394,"date":"2022-10-31T19:58:00","date_gmt":"2022-10-31T16:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229394"},"modified":"2022-11-09T06:50:09","modified_gmt":"2022-11-09T03:50:09","slug":"o-que-significa-usar-o-wordpress-como-proxy","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/o-que-significa-usar-o-wordpress-como-proxy\/","title":{"rendered":"O que significa usar o WordPress como proxy?"},"content":{"rendered":"\n<p>Se voc\u00ea j\u00e1 trabalhou com o WordPress por algum tempo, especialmente quando se trata de usar algum tipo de funcionalidade do Ajax, provavelmente j\u00e1 ouviu a frase &#8220;usar o WordPress como proxy&quot; em algum momento.<\/p>\n<p>E mesmo que voc\u00ea n\u00e3o tenha, as chances de que voc\u00ea realmente fez isso s\u00e3o muito altas.<\/p>\n<p>Embora eu ache que, \u00e0 medida que o tempo avan\u00e7a, veremos eventualmente a API REST substituir as formas tradicionais que usamos o Ajax, mas essa \u00e9 provavelmente uma hist\u00f3ria diferente para outra hora.<\/p>\n<p>Ent\u00e3o, o que significa usar o WordPress como proxy sempre que voc\u00ea estiver trabalhando com solicita\u00e7\u00f5es Ajax? Requer um pouco de compreens\u00e3o das solicita\u00e7\u00f5es entre sites, como funciona o roteamento de uma solicita\u00e7\u00e3o pelo WordPress e, em seguida, analisa a resposta.<\/p>\n<h2>Use o WordPress como um proxy<\/h2>\n<p>\u00c9 um post um pouco longo, n\u00e3o \u00e9? Em vez disso, tentarei dividi-lo em termos mais curtos para que voc\u00ea possa l\u00ea-lo e depois voltar ao trabalho.<\/p>\n<h3>Como procurador<\/h3>\n<p>Primeiro, pegue <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\">a defini\u00e7\u00e3o de um proxy<\/a> :<\/p>\n<blockquote>\n<p>a autoridade para representar outra pessoa, especialmente na vota\u00e7\u00e3o<\/p>\n<\/blockquote>\n<p>Se voc\u00ea clicar no link acima, notar\u00e1 que existem algumas outras defini\u00e7\u00f5es, mas nenhuma delas \u00e9 realmente suficiente. Em vez disso, gosto de pensar neles um pouco mais no abstrato, pelo menos no que diz respeito ao software.<\/p>\n<p>Para os prop\u00f3sitos deste post, digamos que o WordPress seja um proxy para uma solicita\u00e7\u00e3o, o que significa que \u00e9 respons\u00e1vel por servir de intermedi\u00e1rio entre o in\u00edcio da solicita\u00e7\u00e3o e a resposta a ela.<\/p>\n<p>Resumidamente,<\/p>\n<blockquote>\n<p>O WordPress funciona como um proxy roteando uma solicita\u00e7\u00e3o para outro servi\u00e7o e capturando sua resposta.<\/p>\n<\/blockquote>\n<p>Talvez voc\u00ea j\u00e1 tenha ouvido algo parecido, talvez n\u00e3o. Independentemente disso, \u00e9 assim que pode parecer em alto n\u00edvel:<\/p>\n<p>Agora, quando voc\u00ea precisar fazer uma solicita\u00e7\u00e3o ass\u00edncrona (ou uma solicita\u00e7\u00e3o Ajax, como usarei no restante deste post), voc\u00ea ter\u00e1 uma das duas op\u00e7\u00f5es:<\/p>\n<ol>\n<li>fa\u00e7a a solicita\u00e7\u00e3o para uma p\u00e1gina que existe dentro do WordPress,<\/li>\n<li>fa\u00e7a a solicita\u00e7\u00e3o para uma p\u00e1gina que existe em outro dom\u00ednio.<\/li>\n<\/ol>\n<p>Se voc\u00ea estiver fazendo solicita\u00e7\u00f5es para p\u00e1ginas que existem em seu aplicativo (leia-se: dentro do WordPress), n\u00e3o ter\u00e1 problemas.<\/p>\n<h3>Sobre a seguran\u00e7a dos pedidos<\/h3>\n<p>Mas fazer solicita\u00e7\u00f5es Ajax fora do seu pr\u00f3prio dom\u00ednio \u00e9 imposs\u00edvel. Isso ocorre porque se destina 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> 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>Em suma, cada um deles se refere ao seguinte, respectivamente:<\/p>\n<blockquote>\n<p>Os ataques XSS ocorrem quando um invasor usa um aplicativo da Web para enviar c\u00f3digo malicioso, geralmente na forma de um script do lado do navegador, para um usu\u00e1rio final diferente<\/p>\n<\/blockquote>\n<p>e:<\/p>\n<blockquote>\n<p>Cross-Site Request Forgery (CSRF) \u00e9 um ataque que for\u00e7a um usu\u00e1rio final a executar a\u00e7\u00f5es indesejadas em um aplicativo da Web no qual ele est\u00e1 autenticado no momento.<\/p>\n<\/blockquote>\n<p>Em resumo, \u00e9 por isso que precisamos usar o WordPress como proxy. Naturalmente, por\u00e9m, isso levanta a quest\u00e3o de como?<\/p>\n<h3>Usando o WordPress como um proxy<\/h3>\n<p>Para fazer isso, voc\u00ea precisar\u00e1 de v\u00e1rias coisas:<\/p>\n<ol>\n<li>\u00a0uma p\u00e1gina que sua solicita\u00e7\u00e3o Ajax pode consultar,<\/li>\n<li>uma fun\u00e7\u00e3o para capturar a solicita\u00e7\u00e3o ajax e envi\u00e1-la para a URL adequada,<\/li>\n<li>uma maneira de o lado do servidor analisar a resposta,<\/li>\n<li>uma fun\u00e7\u00e3o para retornar os dados para a fun\u00e7\u00e3o Ajax original.<\/li>\n<\/ol>\n<p>Novamente, por uma quest\u00e3o de espa\u00e7o, n\u00e3o fornecerei um exemplo aprofundado disso, mas deve ser suficiente para voc\u00ea come\u00e7ar.<\/p>\n<p>Primeiro, voc\u00ea precisa ter certeza de ter uma fun\u00e7\u00e3o definida para capturar sua solicita\u00e7\u00e3o Ajax. J\u00e1 existe muita documenta\u00e7\u00e3o sobre isso no Codex. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/833c1d1819b8863697aea00a716b2116#file-01_get_columns-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Um exemplo simples<\/a> disso ficaria assim:<\/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>Em seguida, voc\u00ea precisa de uma p\u00e1gina no servidor para fazer uma solicita\u00e7\u00e3o \u00e0 URL que cont\u00e9m seus dados. Isso pode ser feito usando <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a>, isso pode ser feito 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 isso pode ser feito por outros meios.<\/p>\n<p>Como n\u00e3o sei nem quero fornecer um exemplo prescritivo, compartilharei uma demonstra\u00e7\u00e3o muito simples de como isso pode funcionar (<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\">pelo menos nos est\u00e1gios iniciais<\/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>Ao receber uma resposta, voc\u00ea pode optar por analis\u00e1-la no lado do servidor (o que eu recomendo) e retorn\u00e1-la usando um formato leve para a fun\u00e7\u00e3o JavaScript original, conforme visto acima. Observe que estou usando <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> no c\u00f3digo acima.<\/p>\n<p>A partir da\u00ed, voc\u00ea pode fazer o que for necess\u00e1rio na p\u00e1gina em quest\u00e3o com os dados que possui. Observe que as informa\u00e7\u00f5es est\u00e3o contidas no objeto de resposta e talvez seja necess\u00e1rio inspecionar o que ele cont\u00e9m para trat\u00e1-las adequadamente. Isso \u00e9 realizado e demonstrado no c\u00f3digo acima.<\/p>\n<p>Mas os detalhes disso depender\u00e3o muito do que voc\u00ea deseja alcan\u00e7ar.<\/p>\n<h2>WordPress como proxy<\/h2>\n<p>Por fim, o fluxo de controle se parece com isto:<\/p>\n<p>O objetivo de todos os itens acima \u00e9 ajudar a fornecer um pouco de fundo sobre o motivo pelo qual voc\u00ea pode ver alguns dos c\u00f3digos que voc\u00ea faz, bem como por que voc\u00ea precisa estruturar seu c\u00f3digo assim.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ent\u00e3o, o que significa usar o WordPress como proxy sempre que voc\u00ea estiver trabalhando com solicita\u00e7\u00f5es Ajax? Confira esses exemplos.<\/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":[898,722,920,846,867],"tags":[1170],"class_list":["post-229394","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-outro","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229394"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229394\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229394"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229394"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}