{"id":231760,"date":"2022-12-24T18:30:00","date_gmt":"2022-12-24T15:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231760"},"modified":"2022-12-07T11:02:09","modified_gmt":"2022-12-07T08:02:09","slug":"trovare-la-destinazione-di-un-reindirizzamento-con-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/trovare-la-destinazione-di-un-reindirizzamento-con-php\/","title":{"rendered":"Trovare la destinazione di un reindirizzamento con PHP"},"content":{"rendered":"\n<p>Di recente, stavo lavorando a un progetto che comunicava con un&#8217;API di terze parti che, come molte API, restituisce molti dati, parte dei quali include un URL per il prodotto associato all&#8217;API.<\/p>\n<p>La cosa sull&#8217;API che veniva restituita non era l&#8217;URL di destinazione corretto. Invece, era un URL che alla fine reindirizzava a un altro URL.<\/p>\n<p>Quindi immagina di colpire, ad esempio, <strong>acme.site-info.com<\/strong> e averlo direttamente su <strong>acme.com<\/strong>. Lo facciamo manualmente tutto il tempo, ma avevo bisogno di ottenere la destinazione effettiva &#8211; o finale &#8211; della diretta dall&#8217;URL.<\/p>\n<p>E trovare la destinazione di un reindirizzamento con PHP \u00e8 facile; tuttavia, questo presuppone che ci sia un solo reindirizzamento.<\/p>\n<p>Tuttavia, ecco come farlo.<\/p>\n<p>Tieni presente che il seguente presupposto presuppone che tu abbia familiarit\u00e0 con <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=\"Trovare la destinazione di un reindirizzamento con PHP\" ><\/a><\/p>\n<p>E in caso contrario, \u00e8 abbastanza facile utilizzare la funzione.<\/p>\n<blockquote>\n<p>curl viene utilizzato nelle righe di comando o negli script per trasferire i dati. Viene anche utilizzato in automobili, televisori, router, stampanti, apparecchiature audio, telefoni cellulari, tablet, decoder, lettori multimediali ed \u00e8 la spina dorsale di trasferimento Internet per migliaia di applicazioni software che interessano ogni giorno miliardi di persone.<\/p>\n<\/blockquote>\n<p>Inoltre, il manuale PHP contiene molte informazioni al riguardo <a href=\"https:\/\/www.php.net\/manual\/en\/book.curl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">che puoi esaminare<\/a> secondo necessit\u00e0 (e probabilmente ne avrai bisogno anche in futuro).<\/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=\"Trovare la destinazione di un reindirizzamento con PHP\" ><\/a><\/p>\n<p>Ad ogni modo, ecco il codice con un po&#8217; di spiegazione <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e9882520588a5d8ee8948050ce48d69\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dopo il codice<\/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 funzione esegue le seguenti operazioni:<\/p>\n<ol>\n<li>accetta l&#8217;URL fornito dall&#8217;API,<\/li>\n<li>recupera le intestazioni dalla richiesta all&#8217;URL tramite cURL,<\/li>\n<li>fornisce le intestazioni che possiamo leggere per afferrare l&#8217;URL<\/li>\n<\/ol>\n<p>Nota anche che separo l&#8217;URL in base alla barra in modo da poter leggere solo il dominio poich\u00e9 non sono preoccupato per nulla dopo il dominio principale (quindi se un dominio ha un&#8217;estensione <strong>index<\/strong> <strong>.php<\/strong>, <strong>default.<em><\/em><\/strong> aspx <em><\/em> estensione, ecc.), quindi posso usarlo secondo necessit\u00e0 nel mio lavoro.<\/p>\n<p>In secondo luogo, nota che non so se funzioner\u00e0 per pi\u00f9 di un hop. Quindi, se hai pi\u00f9 reindirizzamenti, puoi ripetere questa funzione pi\u00f9 volte. Non lo so, ma ho pensato che valesse la pena menzionarlo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questa soluzione per trovare la destinazione di un reindirizzamento con PHP \u00e8 semplice ma presuppone un unico reindirizzamento.<\/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":[896,804,720],"tags":[1168],"class_list":["post-231760","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231760"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231760\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/235285"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231760"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231760"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}