{"id":231178,"date":"2022-12-24T17:55:00","date_gmt":"2022-12-24T14:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231178"},"modified":"2022-12-07T11:01:59","modified_gmt":"2022-12-07T08:01:59","slug":"encontrar-el-destino-de-una-redireccion-con-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/encontrar-el-destino-de-una-redireccion-con-php\/","title":{"rendered":"Encontrar el destino de una redirecci\u00f3n con PHP"},"content":{"rendered":"\n<p>Recientemente, estaba trabajando en un proyecto que se comunicaba con una API de terceros que, como muchas API, devuelve una gran cantidad de datos, parte de los cuales incluye una URL para el producto asociado con la API.<\/p>\n<p>Lo que pasaba con la API que se devolv\u00eda no era la URL de destino adecuada. En cambio, era una URL que finalmente redirig\u00eda a otra URL.<\/p>\n<p>As\u00ed que imagine acceder, por ejemplo, <strong>acme.site-info.com<\/strong> y tenerlo directamente en <strong>acme.com<\/strong>. Hacemos esto manualmente todo el tiempo, pero necesitaba obtener el destino real, o final, del directo de la URL.<\/p>\n<p>Y encontrar el destino de una redirecci\u00f3n con PHP es f\u00e1cil; sin embargo, esto supone que solo hay una \u00fanica redirecci\u00f3n.<\/p>\n<p>No obstante, aqu\u00ed est\u00e1 c\u00f3mo hacerlo.<\/p>\n<p>Tenga en cuenta que la siguiente suposici\u00f3n supone que est\u00e1 familiarizado 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=\"Encontrar el destino de una redirecci\u00f3n con PHP\" ><\/a><\/p>\n<p>Y si no, es bastante f\u00e1cil usar la funci\u00f3n.<\/p>\n<blockquote>\n<p>curl se usa en l\u00edneas de comando o scripts para transferir datos. Tambi\u00e9n se usa en autom\u00f3viles, televisores, enrutadores, impresoras, equipos de audio, tel\u00e9fonos m\u00f3viles, tabletas, decodificadores, reproductores multimedia y es la columna vertebral de transferencia de Internet para miles de aplicaciones de software que afectan a miles de millones de humanos diariamente.<\/p>\n<\/blockquote>\n<p>Adem\u00e1s, el manual de PHP tiene mucha informaci\u00f3n al respecto <a href=\"https:\/\/www.php.net\/manual\/en\/book.curl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que puede leer detenidamente<\/a> seg\u00fan sea necesario (y probablemente tambi\u00e9n la necesitar\u00e1 en el 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=\"Encontrar el destino de una redirecci\u00f3n con PHP\" ><\/a><\/p>\n<p>De todos modos, aqu\u00ed est\u00e1 el c\u00f3digo con un poco de explicaci\u00f3n sobre <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1e9882520588a5d8ee8948050ce48d69\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">despu\u00e9s del c\u00f3digo<\/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 funci\u00f3n hace lo siguiente:<\/p>\n<ol>\n<li>acepta la URL proporcionada por la API,<\/li>\n<li>recupera los encabezados de la solicitud a la URL por cURL,<\/li>\n<li>proporciona los encabezados que podemos leer para tomar la URL<\/li>\n<\/ol>\n<p>Tenga en cuenta tambi\u00e9n que separo la URL en funci\u00f3n de la barra inclinada para que pueda leer solo el dominio, ya que no me preocupa nada despu\u00e9s del dominio principal (por lo tanto, si un dominio tiene una extensi\u00f3n <strong>index<\/strong> <strong>.php ,<\/strong> <strong>por defecto.<em><\/em><\/strong> aspx <em><\/em> extensi\u00f3n, etc.), entonces puedo usarlo seg\u00fan sea necesario en mi trabajo.<\/p>\n<p>En segundo lugar, tenga en cuenta que no s\u00e9 si esto funcionar\u00e1 para m\u00e1s de un salto. Entonces, si tiene varias redirecciones, puede repetir esta funci\u00f3n varias veces. No s\u00e9, pero pens\u00e9 que val\u00eda la pena mencionarlo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta soluci\u00f3n para encontrar el destino de una redirecci\u00f3n con PHP es f\u00e1cil pero supone una sola redirecci\u00f3n.<\/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":[892,716,800],"tags":[1172],"class_list":["post-231178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231178"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231178\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/235285"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}