{"id":228914,"date":"2022-10-23T16:13:00","date_gmt":"2022-10-23T13:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228914"},"modified":"2022-11-09T04:46:44","modified_gmt":"2022-11-09T01:46:44","slug":"requetes-a-distance-avec-wp_safe_remote_get","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/requetes-a-distance-avec-wp_safe_remote_get\/","title":{"rendered":"Requ\u00eates \u00e0 distance avec wp_safe_remote_get"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/requetes-a-distance-avec-wp_remote_get\/\" title=\"Hier\" >Hier<\/a>, j&rsquo;ai partag\u00e9 un post sur la fa\u00e7on d&rsquo;utiliser <code>wp_remote_get<\/code>mais j&rsquo;ai omis une fonction alternative: <code>wp_safe_remote_get<\/code>. L&rsquo;objectif initial \u00e9tait d&rsquo;utiliser le premier message pour montrer\u00a0:<\/p>\n<ol>\n<li>Ce que la fonction d&rsquo;origine accepte,<\/li>\n<li>Comment utiliser la fonction d&rsquo;origine,<\/li>\n<li>Ce que la fonction d&rsquo;origine renvoie,<\/li>\n<li>\u00c0 quoi ressemble une mise en \u0153uvre.<\/li>\n<\/ol>\n<p>Et puis j&rsquo;allais jeter un oeil \u00e0 <code>wp_safe_remote_get<\/code>. Mais il y a un d\u00e9fi: j&rsquo;ai des amis intelligents. Peu de temps apr\u00e8s avoir publi\u00e9 le post, je re\u00e7ois une r\u00e9ponse de <a href=\"https:\/\/twitter.com\/royboy789\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Roy<\/a> :<\/p>\n<p>Merci Roy! (Assurez-vous de lui <a href=\"https:\/\/hiroy.club\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dire &quot;Salut\u00a0!&quot;<\/a>. \ud83d\ude42<\/p>\n<p>Mais s\u00e9rieusement, la suite du post d&rsquo;hier c&rsquo;est exactement \u00e7a: <code>wp_safe_remote_get<\/code>. Et c&rsquo;est comment d\u00e9terminer la diff\u00e9rence entre les deux fonctions et quand vous utiliseriez l&rsquo;une par rapport \u00e0 l&rsquo;autre.<\/p>\n<h2>wp_safe_remote_get<\/h2>\n<p>Directement de la documentation de l&rsquo;API, <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous apprenons<\/a>\u00a0:<\/p>\n<blockquote>\n<p>Cette fonction est id\u00e9ale lorsque la requ\u00eate HTTP est adress\u00e9e \u00e0 une URL arbitraire. L&rsquo;URL est valid\u00e9e pour \u00e9viter la redirection et les attaques de contrefa\u00e7on de demande.<\/p>\n<\/blockquote>\n<p>Et similaire \u00e0 son homologue, il accepte une URL et une s\u00e9rie d&rsquo;arguments qui peuvent sp\u00e9cifier comment la requ\u00eate est faite.<\/p>\n<p>De plus, tout comme <code>wp_remote_get<\/code>, il renvoie \u00e9galement un tableau des donn\u00e9es de r\u00e9ponse ou une instance de <code>WP_Error<\/code>si la requ\u00eate \u00e9choue.<\/p>\n<p>L&rsquo;utilisation de cette fonction n&rsquo;est pas diff\u00e9rente de l&rsquo;utilisation de la pr\u00e9c\u00e9dente, mais elle soul\u00e8ve la question\u00a0:<\/p>\n<p>Quand utilise-t-on l&rsquo;un plut\u00f4t que l&rsquo;autre? Plus pr\u00e9cis\u00e9ment, quand utilise-t-on <code>wp_remote_get<\/code>versus <code>wp_safe_remote_get<\/code>?<\/p>\n<h3>Lire la source<\/h3>\n<p>Lorsque vous \u00eates confront\u00e9 \u00e0 une situation comme celle-ci, la premi\u00e8re meilleure chose \u00e0 faire est de lire la source\u00a0:<\/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>Si vous lisez les liens ci-dessus, vous remarquerez que ce dernier rejette les &quot;URL non s\u00e9curis\u00e9es&quot; qui sont d\u00e9termin\u00e9es par <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> via une s\u00e9rie de v\u00e9rifications avanc\u00e9es.<\/p>\n<h3>Mais encore, lequel dois-je utiliser\u00a0?<\/h3>\n<p>Cela laisse toujours la question sans r\u00e9ponse, n&rsquo;est-ce pas? Je pense qu&rsquo;il est facile de faire la d\u00e9claration g\u00e9n\u00e9rale que vous devriez toujours utiliser wp_safe_remote_get (ou wp_safe_remote_post, d&rsquo;ailleurs).<\/p>\n<p>Cependant, tous les projets sont diff\u00e9rents.<\/p>\n<p>Par exemple, si vous travaillez sur un plugin qui ne sera utilis\u00e9 que sur un intranet et que vous contr\u00f4lez, par exemple, une liste blanche d&rsquo;URL pouvant \u00eatre transmises \u00e0 la fonction, vous pouvez utiliser le premier.<\/p>\n<p>Si, toutefois, vous exposez ce dernier aux utilisateurs, utilisez toujours la version s\u00e9curis\u00e9e de la fonction.<\/p>\n<h2>Bref<\/h2>\n<p>Ma r\u00e8gle d&rsquo;or est la suivante (et c&rsquo;est similaire \u00e0 la d\u00e9sinfection):<\/p>\n<p>Si les utilisateurs vont interagir avec la fonction, assurez-vous qu&rsquo;ils interagissent avec la version la plus s\u00fbre du code possible.<\/p>\n<p>Sinon, il y a trop de risques.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous ne savez pas quand utiliser wp_remote_get ou wp_safe_remote_get, peut-\u00eatre que cet article vous aidera \u00e0 d\u00e9terminer le meilleur moment.<\/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":[893,717,811,862],"tags":[1167],"class_list":["post-228914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-plugins-2","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=228914"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/168025"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}