{"id":229061,"date":"2022-10-23T15:28:00","date_gmt":"2022-10-23T12:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229061"},"modified":"2022-11-09T05:22:52","modified_gmt":"2022-11-09T02:22:52","slug":"solicitacoes-remotas-com-wp_safe_remote_get","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/solicitacoes-remotas-com-wp_safe_remote_get\/","title":{"rendered":"Solicita\u00e7\u00f5es Remotas com wp_safe_remote_get"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/solicitacoes-remotas-com-wp_remote_get\/\" title=\"Ontem\" >Ontem<\/a>, compartilhei um post de como usar <code>wp_remote_get<\/code>, mas deixei de fora uma fun\u00e7\u00e3o alternativa: <code>wp_safe_remote_get<\/code>. O objetivo original era usar o primeiro post para mostrar:<\/p>\n<ol>\n<li>O que a fun\u00e7\u00e3o original aceita,<\/li>\n<li>Como usar a fun\u00e7\u00e3o original,<\/li>\n<li>O que a fun\u00e7\u00e3o original retorna,<\/li>\n<li>Como uma implementa\u00e7\u00e3o se parece.<\/li>\n<\/ol>\n<p>E ent\u00e3o eu ia dar uma olhada <code>wp_safe_remote_get<\/code>. Mas h\u00e1 um desafio: tenho amigos inteligentes. Pouco depois de publicar o post, recebo uma resposta de <a href=\"https:\/\/twitter.com\/royboy789\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Roy<\/a> :<\/p>\n<p>Obrigado, Ruy! (Certifique-se de <a href=\"https:\/\/hiroy.club\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dizer &quot;Oi!&quot;<\/a> para ele. \ud83d\ude42<\/p>\n<p>Mas falando s\u00e9rio, a continua\u00e7\u00e3o do post de ontem \u00e9 exatamente isso: <code>wp_safe_remote_get<\/code>. E \u00e9 como determinar a diferen\u00e7a nas duas fun\u00e7\u00f5es e quando voc\u00ea usaria uma sobre a outra.<\/p>\n<h2>wp_safe_remote_get<\/h2>\n<p>Direto dos documentos da API, <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aprendemos<\/a> :<\/p>\n<blockquote>\n<p>Essa fun\u00e7\u00e3o \u00e9 ideal quando a solicita\u00e7\u00e3o HTTP est\u00e1 sendo feita para uma URL arbitr\u00e1ria. A URL \u00e9 validada para evitar redirecionamentos e solicita\u00e7\u00f5es de ataques de falsifica\u00e7\u00e3o.<\/p>\n<\/blockquote>\n<p>E semelhante ao seu hom\u00f3logo, ele aceita uma URL e uma s\u00e9rie de argumentos que podem especificar como a solicita\u00e7\u00e3o \u00e9 feita.<\/p>\n<p>Al\u00e9m disso, assim como <code>wp_remote_get<\/code>, ele tamb\u00e9m retorna uma matriz dos dados de resposta ou uma inst\u00e2ncia de <code>WP_Error<\/code>se a solicita\u00e7\u00e3o falhar.<\/p>\n<p>Usar esta fun\u00e7\u00e3o n\u00e3o \u00e9 diferente de usar a anterior, mas levanta a quest\u00e3o:<\/p>\n<p>Quando usamos um sobre o outro? Mais especificamente, quando usamos <code>wp_remote_get<\/code>versus <code>wp_safe_remote_get<\/code>?<\/p>\n<h3>Leia a fonte<\/h3>\n<p>Quando voc\u00ea se depara com uma situa\u00e7\u00e3o como essa, a primeira coisa a fazer \u00e9 ler a fonte:<\/p>\n<ol>\n<li><a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.7\/src\/wp-includes\/http.php#L168\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>wp_remote_get<\/code><\/a><\/li>\n<li><a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.7\/src\/wp-includes\/http.php#L67\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>wp_safe_remote_get<\/code><\/a><\/li>\n<\/ol>\n<p>Se voc\u00ea ler os links acima, notar\u00e1 que o \u00faltimo rejeita os &#8220;URLs inseguros&quot; que s\u00e3o determinados por <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_http_validate_url\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_http_validate_url<\/a> atrav\u00e9s de uma s\u00e9rie de verifica\u00e7\u00f5es avan\u00e7adas.<\/p>\n<h3>Mas ainda assim, qual eu uso?<\/h3>\n<p>Isso ainda deixa a pergunta sem resposta, n\u00e3o \u00e9? Eu acho que \u00e9 f\u00e1cil fazer a declara\u00e7\u00e3o geral de que voc\u00ea deve sempre usar wp_safe_remote_get (ou wp_safe_remote_post, para esse assunto).<\/p>\n<p>Todos os projetos s\u00e3o diferentes, no entanto.<\/p>\n<p>Por exemplo, se voc\u00ea estiver trabalhando em um plug-in que ser\u00e1 usado apenas em uma intranet e tiver controle sobre, digamos, uma lista de permiss\u00f5es de URL que pode ser passada para a fun\u00e7\u00e3o, n\u00e3o h\u00e1 problema em usar o primeiro.<\/p>\n<p>Se, no entanto, voc\u00ea estiver expondo o \u00faltimo aos usu\u00e1rios, sempre use a vers\u00e3o segura da fun\u00e7\u00e3o.<\/p>\n<h2>Resumidamente<\/h2>\n<p>Minha regra geral \u00e9 esta (e \u00e9 semelhante \u00e0 higieniza\u00e7\u00e3o):<\/p>\n<p>Se os usu\u00e1rios forem interagir com a fun\u00e7\u00e3o, verifique se eles est\u00e3o interagindo com a vers\u00e3o mais segura poss\u00edvel do c\u00f3digo.<\/p>\n<p>Caso contr\u00e1rio, muito est\u00e1 em risco.<\/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>Se voc\u00ea n\u00e3o tiver certeza de quando usar wp_remote_get ou wp_safe_remote_get, talvez este post o ajude a determinar quando \u00e9 melhor.<\/p>\n","protected":false},"author":1,"featured_media":168025,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,816,867],"tags":[1170],"class_list":["post-229061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-plug-ins","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229061","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=229061"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229061\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/168025"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}