{"id":230971,"date":"2022-12-24T18:35:00","date_gmt":"2022-12-24T15:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230971"},"modified":"2022-12-07T11:02:14","modified_gmt":"2022-12-07T08:02:14","slug":"hitta-destinationen-foer-en-omdirigering-med-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hitta-destinationen-foer-en-omdirigering-med-php\/","title":{"rendered":"Hitta destinationen f\u00f6r en omdirigering med PHP"},"content":{"rendered":"\n<p>Nyligen arbetade jag med ett projekt som kommunicerade med ett tredjeparts-API som, precis som m\u00e5nga API:er, skickar tillbaka mycket data, varav en del inkluderar en URL f\u00f6r produkten som \u00e4r kopplad till API:n.<\/p>\n<p>Saken med API:et som returnerades var inte den korrekta m\u00e5ladressen. Ist\u00e4llet var det en URL som i slut\u00e4ndan omdirigerades till en annan URL.<\/p>\n<p>S\u00e5 t\u00e4nk dig att sl\u00e5 till, s\u00e4g, <strong>acme.site-info.com<\/strong> och ha den direkt till <strong>acme.com<\/strong>. Vi g\u00f6r detta manuellt hela tiden, men jag beh\u00f6vde f\u00e5 den faktiska \u2013 eller den slutliga \u2013 destinationen f\u00f6r direkten fr\u00e5n webbadressen.<\/p>\n<p>Och att hitta destinationen f\u00f6r en omdirigering med PHP \u00e4r l\u00e4tt; Detta f\u00f6ruts\u00e4tter dock att det bara finns en enda omdirigering.<\/p>\n<p>\u00c4nd\u00e5, s\u00e5 h\u00e4r g\u00f6r du.<\/p>\n<p>Observera att f\u00f6ljande antagande f\u00f6ruts\u00e4tter att du \u00e4r bekant med <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=\"Hitta destinationen f\u00f6r en omdirigering med PHP\" ><\/a><\/p>\n<p>Och om inte \u00e4r det tillr\u00e4ckligt enkelt att anv\u00e4nda funktionen.<\/p>\n<blockquote>\n<p>curl anv\u00e4nds i kommandorader eller skript f\u00f6r att \u00f6verf\u00f6ra data. Den anv\u00e4nds ocks\u00e5 i bilar, tv-apparater, routrar, skrivare, ljudutrustning, mobiltelefoner, surfplattor, digitalboxar, mediaspelare och \u00e4r ryggraden f\u00f6r internet\u00f6verf\u00f6ring f\u00f6r tusentals mjukvaruapplikationer som p\u00e5verkar miljarder m\u00e4nniskor dagligen.<\/p>\n<\/blockquote>\n<p>Dessutom har PHP-manualen mycket information om det <a href=\"https:\/\/www.php.net\/manual\/en\/book.curl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">som du kan l\u00e4sa<\/a> efter behov (och du kommer f\u00f6rmodligen att beh\u00f6va det i framtiden ocks\u00e5).<\/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=\"Hitta destinationen f\u00f6r en omdirigering med PHP\" ><\/a><\/p>\n<p>Hur som helst, h\u00e4r \u00e4r koden med lite f\u00f6rklaring om <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e9882520588a5d8ee8948050ce48d69\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">efter koden<\/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>Funktionen g\u00f6r f\u00f6ljande:<\/p>\n<ol>\n<li>accepterar webbadressen som tillhandah\u00e5lls av API,<\/li>\n<li>h\u00e4mtar rubrikerna fr\u00e5n beg\u00e4ran till URL:en med cURL,<\/li>\n<li>tillhandah\u00e5ller rubrikerna som vi kan l\u00e4sa och ta tag i URL:en<\/li>\n<\/ol>\n<p>Observera ocks\u00e5 att jag separerar URL:en baserat p\u00e5 snedstrecket s\u00e5 att jag bara kan l\u00e4sa dom\u00e4nen eftersom jag inte \u00e4r orolig f\u00f6r n\u00e5gonting efter huvuddom\u00e4nen (s\u00e5 om en dom\u00e4n har ett <strong>index<\/strong>. <strong>php-<\/strong> till\u00e4gg, <strong>standard.<em><\/em><\/strong> aspx<em><\/em> f\u00f6rl\u00e4ngning etc.), s\u00e5 kan jag anv\u00e4nda den efter behov i mitt arbete.<\/p>\n<p>F\u00f6r det andra, notera att jag inte vet om detta kommer att fungera f\u00f6r mer \u00e4n ett hopp. S\u00e5 om du har flera omdirigeringar kan du upprepa den h\u00e4r funktionen flera g\u00e5nger. Jag vet inte, men jag tyckte det var v\u00e4rt att n\u00e4mna.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Denna l\u00f6sning f\u00f6r att hitta destinationen f\u00f6r en omdirigering med PHP \u00e4r enkel men den f\u00f6ruts\u00e4tter en enda omdirigering.<\/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":[901,807,724],"tags":[1173],"class_list":["post-230971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230971"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230971\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/235285"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}