{"id":231462,"date":"2022-12-24T18:26:00","date_gmt":"2022-12-24T15:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231462"},"modified":"2022-12-07T11:02:06","modified_gmt":"2022-12-07T08:02:06","slug":"trouver-la-destination-dune-redirection-avec-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/trouver-la-destination-dune-redirection-avec-php\/","title":{"rendered":"Trouver la destination d&rsquo;une redirection avec PHP"},"content":{"rendered":"\n<p>R\u00e9cemment, je travaillais sur un projet qui communiquait avec une API tierce qui, comme de nombreuses API, renvoie beaucoup de donn\u00e9es dont une partie comprend une URL pour le produit associ\u00e9 \u00e0 l&rsquo;API.<\/p>\n<p>La chose \u00e0 propos de l&rsquo;API qui \u00e9tait renvoy\u00e9e n&rsquo;\u00e9tait pas la bonne URL de destination. Au lieu de cela, il s&rsquo;agissait d&rsquo;une URL qui a finalement redirig\u00e9 vers une autre URL.<\/p>\n<p>Alors imaginez frapper, disons, <strong>acme.site-info.com<\/strong> et l&rsquo;avoir directement sur <strong>acme.com<\/strong>. Nous le faisons manuellement tout le temps, mais j&rsquo;avais besoin d&rsquo;obtenir la destination r\u00e9elle &#8211; ou finale &#8211; du direct \u00e0 partir de l&rsquo;URL.<\/p>\n<p>Et trouver la destination d&rsquo;une redirection avec PHP est facile ; cependant, cela suppose qu&rsquo;il n&rsquo;y a qu&rsquo;une seule redirection.<\/p>\n<p>N\u00e9anmoins, voici comment proc\u00e9der.<\/p>\n<p>Notez que l&rsquo;hypoth\u00e8se suivante suppose que vous \u00eates familier avec <a href=\"https:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cURL<\/a>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160277-61e708790bd4a.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-160277-61e708790bd4a.png\" alt=\"Trouver la destination d&#039;une redirection avec PHP\" ><\/a><\/p>\n<p>Et sinon, il est assez facile d&rsquo;utiliser la fonction.<\/p>\n<blockquote>\n<p>curl est utilis\u00e9 dans les lignes de commande ou les scripts pour transf\u00e9rer des donn\u00e9es. Il est \u00e9galement utilis\u00e9 dans les voitures, les t\u00e9l\u00e9viseurs, les routeurs, les imprimantes, les \u00e9quipements audio, les t\u00e9l\u00e9phones portables, les tablettes, les d\u00e9codeurs, les lecteurs multim\u00e9dias et constitue l&rsquo;\u00e9pine dorsale du transfert Internet pour des milliers d&rsquo;applications logicielles affectant quotidiennement des milliards d&rsquo;humains.<\/p>\n<\/blockquote>\n<p>De plus, le manuel PHP contient de nombreuses informations \u00e0 ce sujet <a href=\"https:\/\/www.php.net\/manual\/en\/book.curl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que vous pouvez consulter<\/a> au besoin (et vous en aurez probablement besoin \u00e0 l&rsquo;avenir \u00e9galement).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160277-61e7087de6a45.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-160277-61e7087de6a45.png\" alt=\"Trouver la destination d&#039;une redirection avec PHP\" ><\/a><\/p>\n<p>Quoi qu&rsquo;il en soit, voici le code avec un peu d&rsquo;explication <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e9882520588a5d8ee8948050ce48d69\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">apr\u00e8s le code<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Determines the destination URL of a provided URL that gives a redirect.\n *\n * @param string $url the specified URL provided by the API.\n * @return string $url the destination of the specified URL.\n *\/\nprivate function getDestinationUrl($url)\n{\n  $ch = curl_init();\n\n  curl_setopt($ch, CURLOPT_URL, $url);\n  curl_setopt($ch, CURLOPT_HEADER, true);\n  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\n  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\n  \/\/ Read the headers as provided by cURL.\n  $headers = curl_exec($ch);\n  $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);\n\n  \/\/ We only need the domain so just read the first part.\n  $url = explode('\/', $url);\n  $url = $url[0];\n\n  return $url;\n}<\/code><\/pre>\n<p>La fonction effectue les op\u00e9rations suivantes\u00a0:<\/p>\n<ol>\n<li>accepte l&rsquo;URL telle que fournie par l&rsquo;API,<\/li>\n<li>r\u00e9cup\u00e8re les en-t\u00eates de la requ\u00eate vers l&rsquo;URL par cURL,<\/li>\n<li>fournit les en-t\u00eates que nous pouvons lire en saisissant l&rsquo;URL<\/li>\n<\/ol>\n<p>Notez \u00e9galement que je s\u00e9pare l&rsquo;URL en fonction de la barre oblique afin que je puisse lire uniquement le domaine car je ne m&rsquo;inqui\u00e8te de rien apr\u00e8s le domaine principal (donc si un domaine a une extension <strong>index<\/strong>. <strong>php ,<\/strong> <strong>default.<em><\/em><\/strong> aspx<em><\/em> extension, etc.), alors je peux l&rsquo;utiliser au besoin dans mon travail.<\/p>\n<p>Deuxi\u00e8mement, notez que je ne sais pas si cela fonctionnera pour plus d&rsquo;un saut. Donc, si vous avez plusieurs redirections, vous pouvez r\u00e9p\u00e9ter cette fonction plusieurs fois. Je ne sais pas, mais j&rsquo;ai pens\u00e9 que cela valait la peine d&rsquo;\u00eatre mentionn\u00e9.<\/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>Cette solution pour trouver la destination d&rsquo;une redirection avec PHP est simple mais elle suppose une seule redirection.<\/p>\n","protected":false},"author":1,"featured_media":235285,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801],"tags":[1167],"class_list":["post-231462","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231462","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=231462"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231462\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235285"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}