{"id":231667,"date":"2022-12-28T18:29:00","date_gmt":"2022-12-28T15:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231667"},"modified":"2022-12-28T18:30:24","modified_gmt":"2022-12-28T15:30:24","slug":"la-difference-entre-les-requetes-curl-et-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/la-difference-entre-les-requetes-curl-et-wordpress\/","title":{"rendered":"La diff\u00e9rence entre les requ\u00eates cURL et WordPress"},"content":{"rendered":"\n<p><a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a> est une biblioth\u00e8que PHP tr\u00e8s populaire que j&rsquo;ai r\u00e9f\u00e9renc\u00e9e dans plusieurs autres articles (<a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-de-curl-pour-determiner-si-lurl-specifiee-est-une-page-valide\/\" title=\"1\">1<\/a> et <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/trouver-la-destination-dune-redirection-avec-php\/\" title=\"2\">2<\/a>, par exemple). Et c&rsquo;est celui qui, je pense, devrait \u00eatre revu, explor\u00e9 et \u00e9ventuellement utilis\u00e9 par quiconque travaille en PHP (oui, m\u00eame ceux qui travaillent sur WordPress).<\/p>\n<p>Mais gr\u00e2ce aux API WordPress natives, nous avons un niveau d&rsquo;abstraction qui nous permet d&rsquo;obtenir une grande partie des m\u00eames fonctionnalit\u00e9s (sinon les m\u00eames fonctionnalit\u00e9s).<\/p>\n<p>Plus pr\u00e9cis\u00e9ment, je parle de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_safe_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_safe_remote_get<\/a>.<\/p>\n<blockquote><p>\n<a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159653-61e6f9c04b30e.png\" alt=\"La diff\u00e9rence entre les requ\u00eates cURL et WordPress\"><\/a><\/p>\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>Je mentionne sp\u00e9cifiquement la variante s\u00fbre de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_remote_get\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cette fonction<\/a> pour la d\u00e9finition ci-dessus (il existe une autre variante, mais il est important de prendre des pr\u00e9cautions contre les URL arbitraires pour des raisons de s\u00e9curit\u00e9).<\/p>\n<h2>requ\u00eates cURL et WordPress<\/h2>\n<p>Quoi qu&rsquo;il en soit, \u00e0 quoi pourrait ressembler <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-00-get-curl-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une fonction<\/a> si nous devions utiliser cette biblioth\u00e8que cURL\u00a0?<\/p>\n<pre><code>&lt;?php\n\ntry {\n    $curl = curl_init();\n    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');\n    curl_setopt($curl, CURLOPT_URL, $url);\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);\n    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);\n    $response = curl_exec($curl);\n\n    if (is_object($response)) {\n        return false;\n    }\n\n    if (false === $response) {\n        throw new Exception(curl_error($curl), curl_errno($curl));\n    }\n\n    curl_close($curl);\n} catch (Exception $e) {\n    trigger_error(\n        sprintf(\n            'Curl failed with error #%d: %s',\n            $e-&gt;getCode(),\n            $e-&gt;getMessage()\n        ),\n        E_USER_ERROR\n    );\n}<\/code><\/pre>\n<p>En bref (et c&rsquo;est typique pour la plupart des requ\u00eates cURL) :<\/p>\n<ul>\n<li>initialiser la librairie cURL,<\/li>\n<li><a href=\"https:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d\u00e9finir des options<\/a> propres \u00e0 votre demande (qui varieront en fonction de ladite demande),<\/li>\n<li>faire la demande,<\/li>\n<li>\u00e9valuer la r\u00e9ponse<\/li>\n<li>attraper toutes les exceptions n\u00e9cessaires.<\/li>\n<\/ul>\n<p>Et puis si on utilisait <a href=\"https:\/\/gist.github.com\/tommcfarlin\/8762acc585d6b4987b23a1304615bd4d#file-01-safe-remote-get-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la m\u00eame d\u00e9clinaison du code<\/a> dans WordPress ?<\/p>\n<pre><code>&lt;?php\n\n$response = wp_safe_remote_get($url);\nif (is_wp_error($response)) {\n    return '';\n}\n$response = $response['body'];<\/code><\/pre>\n<p>C&rsquo;est beaucoup plus petit et sans doute plus facile \u00e0 lire (au moins pour ceux qui travaillent dans WordPress). En termes d&rsquo;arguments, je ne transmets rien non plus dans la fonction autre que l&rsquo;URL.<\/p>\n<p>Si vous lisez la documentation de l&rsquo;API li\u00e9e, vous verrez que nous avons un certain contr\u00f4le sur cela\u00a0; cependant, cela variera en fonction de la mani\u00e8re dont vous devez communiquer avec un point de terminaison donn\u00e9.<\/p>\n<p>De plus, la fa\u00e7on dont vous g\u00e9rez <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Error<\/a> d\u00e9pend de vous. Retourner une cha\u00eene vide est rarement la meilleure option ; cependant, pour les besoins de cet exemple, c&rsquo;est suffisant. Le cas que nous recherchons principalement est le corps de la r\u00e9ponse et c&rsquo;est l&rsquo;objet du code.<\/p>\n<h2>Quand utilise-t-on l&rsquo;un ou l&rsquo;autre ?<\/h2>\n<p>Quand il s&rsquo;agit de travailler avec les requ\u00eates distantes cURL et WordPress et de d\u00e9terminer quelle m\u00e9thode utiliser, j&rsquo;ai tendance \u00e0 suivre cette r\u00e8gle :<\/p>\n<ul>\n<li>Si ce dont j&rsquo;ai besoin peut \u00eatre r\u00e9alis\u00e9 avec une fonction API WordPress, je l&rsquo;utilise.<\/li>\n<li>Sinon, j&rsquo;utiliserai cURL.<\/li>\n<\/ul>\n<p>Je ne peux pas fournir une r\u00e8gle plus solide.<\/p>\n<p>Au lieu de cela, examinez le point de terminaison avec lequel vous communiquez, d\u00e9terminez le niveau de contr\u00f4le dont vous avez besoin sur la demande et prenez une d\u00e9cision sur la mani\u00e8re dont vous souhaitez g\u00e9rer la r\u00e9ponse.<\/p>\n<p>\u00c0 partir de l\u00e0, vous devriez avoir une bonne id\u00e9e de la biblioth\u00e8que \u00e0 utiliser.<\/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>Les requ\u00eates \u00e0 distance cURL et WordPress nous permettent une grande partie des m\u00eames fonctionnalit\u00e9s. Mais nous devons \u00eatre en mesure de d\u00e9terminer quelle option est la meilleure.<\/p>\n","protected":false},"author":1,"featured_media":237087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801,841],"tags":[1167],"class_list":["post-231667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231667","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=231667"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/237087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}