{"id":230929,"date":"2022-12-24T18:08:00","date_gmt":"2022-12-24T15:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230929"},"modified":"2022-12-07T11:02:11","modified_gmt":"2022-12-07T08:02:11","slug":"znajdowanie-miejsca-docelowego-przekierowania-za-pomoca-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/znajdowanie-miejsca-docelowego-przekierowania-za-pomoca-php\/","title":{"rendered":"Znajdowanie miejsca docelowego przekierowania za pomoc\u0105 PHP"},"content":{"rendered":"\n<p>Ostatnio pracowa\u0142em nad projektem, kt\u00f3ry komunikowa\u0142 si\u0119 z zewn\u0119trznym API, kt\u00f3ry, podobnie jak wiele API, odsy\u0142a wiele danych, z kt\u00f3rych cz\u0119\u015b\u0107 zawiera adres URL produktu powi\u0105zanego z API.<\/p>\n<p>Zwracany interfejs API nie by\u0142 prawid\u0142owym docelowym adresem URL. Zamiast tego by\u0142 to adres URL, kt\u00f3ry ostatecznie przekierowywa\u0142 na inny adres URL.<\/p>\n<p>Wyobra\u017a sobie, \u017ce trafisz, powiedzmy, <strong>na acme.site-info.com<\/strong> i skierujesz go bezpo\u015brednio do <strong>acme.com<\/strong>. Robimy to r\u0119cznie przez ca\u0142y czas, ale musia\u0142em uzyska\u0107 rzeczywiste \u2013 lub ostateczne \u2013 miejsce docelowe bezpo\u015brednio z adresu URL.<\/p>\n<p>A znalezienie miejsca docelowego przekierowania za pomoc\u0105 PHP jest \u0142atwe; jednak zak\u0142ada to tylko jedno przekierowanie.<\/p>\n<p>Niemniej jednak, oto jak to zrobi\u0107.<\/p>\n<p>Zwr\u00f3\u0107 uwag\u0119, \u017ce nast\u0119puj\u0105ce za\u0142o\u017cenie zak\u0142ada, \u017ce \u200b\u200bznasz <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=\"Znajdowanie miejsca docelowego przekierowania za pomoc\u0105 PHP\" ><\/a><\/p>\n<p>A je\u015bli nie, korzystanie z funkcji jest do\u015b\u0107 \u0142atwe.<\/p>\n<blockquote>\n<p>curl jest u\u017cywany w wierszach polece\u0144 lub skryptach do przesy\u0142ania danych. Jest r\u00f3wnie\u017c u\u017cywany w samochodach, telewizorach, routerach, drukarkach, sprz\u0119cie audio, telefonach kom\u00f3rkowych, tabletach, dekoderach, odtwarzaczach multimedialnych i stanowi szkielet transferu internetowego dla tysi\u0119cy aplikacji, kt\u00f3re codziennie wp\u0142ywaj\u0105 na miliardy ludzi.<\/p>\n<\/blockquote>\n<p>Co wi\u0119cej, podr\u0119cznik PHP zawiera wiele informacji na ten temat, <a href=\"https:\/\/www.php.net\/manual\/en\/book.curl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kt\u00f3re mo\u017cesz przejrze\u0107<\/a> w razie potrzeby (i prawdopodobnie b\u0119dziesz ich potrzebowa\u0107 r\u00f3wnie\u017c w przysz\u0142o\u015bci).<\/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=\"Znajdowanie miejsca docelowego przekierowania za pomoc\u0105 PHP\" ><\/a><\/p>\n<p>W ka\u017cdym razie, oto kod z ma\u0142ym wyja\u015bnieniem <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e9882520588a5d8ee8948050ce48d69\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">po kodzie<\/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>Funkcja wykonuje nast\u0119puj\u0105ce czynno\u015bci:<\/p>\n<ol>\n<li>akceptuje adres URL podany przez API,<\/li>\n<li>pobiera nag\u0142\u00f3wki z \u017c\u0105dania do adresu URL przez cURL,<\/li>\n<li>udost\u0119pnia nag\u0142\u00f3wki, kt\u00f3re mo\u017cemy odczyta\u0107, aby pobra\u0107 adres URL<\/li>\n<\/ol>\n<p>Zauwa\u017c te\u017c, \u017ce oddzielam adres URL na podstawie uko\u015bnika, abym m\u00f3g\u0142 odczyta\u0107 tylko domen\u0119, poniewa\u017c nie martwi\u0119 si\u0119 o nic po domenie g\u0142\u00f3wnej (wi\u0119c je\u015bli domena ma rozszerzenie <strong>index<\/strong> <strong>.php<\/strong>, <strong>default.<em><\/em><\/strong> aspx <em><\/em> rozszerzenie itp.), to mog\u0119 go wykorzysta\u0107 w mojej pracy w razie potrzeby.<\/p>\n<p>Po drugie, zauwa\u017c, \u017ce nie wiem, czy to zadzia\u0142a dla wi\u0119cej ni\u017c jednego przeskoku. Wi\u0119c je\u015bli masz wiele przekierowa\u0144, mo\u017cesz powt\u00f3rzy\u0107 t\u0119 funkcj\u0119 wiele razy. Nie wiem, ale pomy\u015bla\u0142em, \u017ce warto o tym wspomnie\u0107.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To rozwi\u0105zanie do znalezienia miejsca docelowego przekierowania za pomoc\u0105 PHP jest \u0142atwe, ale zak\u0142ada pojedyncze przekierowanie.<\/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":[721,897,805],"tags":[1169],"class_list":["post-230929","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230929"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/235285"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}