{"id":229050,"date":"2022-10-23T17:44:00","date_gmt":"2022-10-23T14:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229050"},"modified":"2022-11-09T05:20:36","modified_gmt":"2022-11-09T02:20:36","slug":"solicitacoes-remotas-com-wp_remote_get","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/solicitacoes-remotas-com-wp_remote_get\/","title":{"rendered":"Solicita\u00e7\u00f5es Remotas com wp_remote_get"},"content":{"rendered":"\n<p>Se voc\u00ea leu algum dos meus posts anteriores sobre como recuperar arquivos remotos, ent\u00e3o sabe que os velhos h\u00e1bitos s\u00e3o dif\u00edceis de morrer, pois costumo usar <code>file_get_contents<\/code>em vez de arquivos <code>wp_remote_get<\/code>.<\/p>\n<p>Ent\u00e3o, como se faz ao blogar, achei que seria \u00fatil compartilhar um exemplo simples de como usar <code>wp_remote_get<\/code>no seu dia-a-dia.<\/p>\n<p>O post abaixo \u00e9 apenas um trecho de como us\u00e1-lo. Ou seja, ele n\u00e3o mostrar\u00e1 como projetar, digamos, uma classe em torno dele ou uma interface do usu\u00e1rio que permita aos usu\u00e1rios fazer upload de um arquivo. Mas isso deve ser suficiente para come\u00e7ar as coisas.<\/p>\n<p>E incluirei como usar a documenta\u00e7\u00e3o da API e entender como aproveit\u00e1-la ao usar uma fun\u00e7\u00e3o como essa.<\/p>\n<h2>Por que usar wp_remote_get?<\/h2>\n<p>Embora eu nem sempre use a API do WordPress (o que geralmente \u00e9 porque, novamente, velhos h\u00e1bitos s\u00e3o transferidos ou porque desconhe\u00e7o uma fun\u00e7\u00e3o), eu tento.<\/p>\n<p>E acredito firmemente que, se voc\u00ea estiver trabalhando em um ambiente espec\u00edfico de um aplicativo e esse aplicativo fornecer uma API para algo, voc\u00ea deve us\u00e1-lo.<\/p>\n<h3>Como ler os documentos<\/h3>\n<p>Se voc\u00ea estiver familiarizado com como aproveitar a documenta\u00e7\u00e3o, pule esta se\u00e7\u00e3o.<\/p>\n<p>Com isso dito, aqui est\u00e1 o que a documenta\u00e7\u00e3o ao redor <code>wp_remote_get<\/code>diz:<\/p>\n<blockquote>\n<p>Recupere a resposta bruta da solicita\u00e7\u00e3o HTTP usando o m\u00e9todo <strong>GET<\/strong>. Os resultados incluem cabe\u00e7alhos e conte\u00fado HTTP.<\/p>\n<\/blockquote>\n<p>Voc\u00ea pode ler mais nesta p\u00e1gina <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_remote_get\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">no Codex<\/a> e nesta p\u00e1gina nos <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Recursos do desenvolvedor<\/a>. Mas antes de realmente usar a fun\u00e7\u00e3o, \u00e9 importante entender o que ela aceita e o que ela retorna.<\/p>\n<p>E a fun\u00e7\u00e3o aceita dois par\u00e2metros:<\/p>\n<ol>\n<li>o URL para o qual a solicita\u00e7\u00e3o est\u00e1 sendo feita,<\/li>\n<li>o conjunto de argumentos necess\u00e1rios para a solicita\u00e7\u00e3o (que est\u00e1 fora do escopo deste post).<\/li>\n<\/ol>\n<p>E wp_remote_get retorna resultados mistos com base no resultado da solicita\u00e7\u00e3o. De acordo com os recursos do desenvolvedor:<\/p>\n<blockquote>\n<p>(WP_Error|array) A resposta ou WP_Error em caso de falha.<\/p>\n<\/blockquote>\n<p>Neste ponto, sabemos o que a fun\u00e7\u00e3o faz, o que ela aceita e o que ela retorna. Portanto, temos o suficiente para continuar em rela\u00e7\u00e3o \u00e0 cria\u00e7\u00e3o de um exemplo simples.<\/p>\n<h3>Usando wp_remote_get<\/h3>\n<p>Com todos os itens acima, aqui est\u00e1 um exemplo simples de como recuperar um arquivo de um determinado URL. Estou assumindo que a URL est\u00e1 em seu servidor local (porque n\u00e3o quero entrar em solicitar informa\u00e7\u00f5es de outros servidores neste post) e \u00e9 por isso que o dom\u00ednio \u00e9 o TLD de ponto-local.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/690a76864cd305dda1b3456faba3fff2#file-00-wp_remote_get-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Os coment\u00e1rios devem explicar o que est\u00e1 acontecendo<\/a>, mas vou oferecer mais alguns pensamentos depois disso.<\/p>\n<pre><code>&lt;?php\n\n$file = wp_remote_get( 'https:\/\/example.local\/file.png' );\nif (! isset( $file['headers'])) {\n\n  \/*\n   * TODO: You may want to return early here, display an error,\n   * or provide messaging to the user.\n   *\/\n}\n\nif (is_wp_error( $file)) {\n\n  \/*\n   * TODO: Display an error message to the user that the file they\n   * requested was not successfully retrieved.\n   *\/\n}\n\n\/* \n * Get the base directory where we'll store the file. This will just be \n * wp-content\/uploads.\n *\/\n$upload_dir   = wp_upload_dir();\n$upload_dir = trailingslashit( $upload_dir['basedir'] );\n\n\/*\n * Give the file a name that we'll use to write to disk. And\n * build the path to the file including the directory and file name.\n *\/\n$uploaded_filename = 'uploaded.png';\n$file_path         = $upload_dir. $uploaded_filename;\n\n\/*\n * Open a resource for writing the file, write the data, and then close\n * the resource.\n *\/\n$resource = fopen( $file_path, 'w' );\nfwrite( $resource, $file['body'] );\nfclose( $resource );\n<\/code><\/pre>\n<p>As observa\u00e7\u00f5es mais importantes s\u00e3o as seguintes:<\/p>\n<ol>\n<li>Verifique os cabe\u00e7alhos para se certificar de que est\u00e3o definidos. Caso contr\u00e1rio, n\u00e3o h\u00e1 necessidade de prosseguir com a captura do corpo do arquivo.<\/li>\n<li>Se houver um erro, precisamos lidar com isso graciosamente.<\/li>\n<li>Se tudo der certo, estamos prontos para gravar o arquivo no disco. Estou usando as fun\u00e7\u00f5es de arquivo do PHP para fazer isso. Est\u00e1 um pouco fora do escopo do post, mas deve ser f\u00e1cil de entender se voc\u00ea estudar os links abaixo.<\/li>\n<\/ol>\n<p>Em \u00faltima an\u00e1lise, o uso <code>wp_remote_get<\/code>oferece muitas funcionalidades envolvidas em uma fun\u00e7\u00e3o f\u00e1cil de usar.<\/p>\n<h2>Alguns recursos PHP<\/h2>\n<ul>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.fopen.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fopen<\/a><\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.fwrite.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">escrever<\/a><\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.fclose.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fperto<\/a><\/li>\n<\/ul>\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>Como se faz ao blogar, achei que seria \u00fatil compartilhar um exemplo simples de como usar wp_remote_get em seu trabalho di\u00e1rio.<\/p>\n","protected":false},"author":1,"featured_media":168036,"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-229050","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\/229050","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=229050"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229050\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/168036"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}