Поиск пункта назначения перенаправления с помощью PHP
Недавно я работал над проектом, который взаимодействовал со сторонним API, который, как и многие API, отправляет обратно много данных, часть которых включает URL-адрес продукта, связанного с API.
Дело в том, что API, который возвращался, был неправильным URL-адресом назначения. Вместо этого это был URL-адрес, который в конечном итоге перенаправлял на другой URL-адрес.
Итак, представьте, что вы нажимаете, скажем, на acme.site-info.com и получаете прямой доступ к acme.com. Мы все время делаем это вручную, но мне нужно было получить фактический или конечный пункт назначения прямого из URL-адреса.
И найти место назначения перенаправления с PHP легко; однако это предполагает, что существует только одно перенаправление.
Тем не менее, вот как это сделать.
Обратите внимание, что следующее предположение предполагает, что вы знакомы с cURL.
А если нет, то достаточно просто воспользоваться функцией.
curl используется в командных строках или сценариях для передачи данных. Он также используется в автомобилях, телевизорах, маршрутизаторах, принтерах, звуковом оборудовании, мобильных телефонах, планшетах, телевизионных приставках, медиаплеерах и является основой для передачи через Интернет тысяч программных приложений, ежедневно затрагивающих миллиарды людей.
Кроме того, в руководстве по PHP есть много информации об этом , которую вы можете просмотреть по мере необходимости (и, вероятно, она вам понадобится и в будущем).
Во всяком случае, вот код с небольшим пояснением после кода :
<?php
/**
* Determines the destination URL of a provided URL that gives a redirect.
*
* @param string $url the specified URL provided by the API.
* @return string $url the destination of the specified URL.
*/
private function getDestinationUrl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Read the headers as provided by cURL.
$headers = curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
// We only need the domain so just read the first part.
$url = explode('/', $url);
$url = $url[0];
return $url;
}
Функция делает следующее:
- принимает URL-адрес, предоставленный API,
- извлекает заголовки из запроса на URL по cURL,
- предоставляет заголовки, которые мы можем прочитать, чтобы получить URL-адрес
Также обратите внимание, что я разделяю URL-адрес на основе косой черты, чтобы я мог читать только домен, поскольку я не беспокоюсь ни о чем после основного домена (поэтому, если домен имеет расширение index. php, по умолчанию. aspx расширение и т. д.), то я могу использовать его по мере необходимости в своей работе.
Во-вторых, обратите внимание, что я не знаю, будет ли это работать для более чем одного прыжка. Поэтому, если у вас есть несколько перенаправлений, вы можете повторить эту функцию несколько раз. Не знаю, но я подумал, что это стоит упомянуть.

