Как я могу получить заголовки HTTP (расположение) с какого-то URL?

У меня есть какой-то адрес (например: http://example.com/b-out/3456/3212/).This адрес, который я должен пройти через завиток. Я знаю, что этот URL перенаправляет на другой URL (например, HTTP: //sdss.co/go/36a7fe71189fec14c85636f33501f6d2/ ...). И это еще один URL, расположенный в заголовках (расположение) первого URL. Как я могу получить второй URL в некоторой переменной?

1

Решение

Выполните запрос к первому URL-адресу, подтвердите перенаправление и прочитайте заголовок Location. От PHP cURL извлекает заголовки ответа и тело в одном запросе? а также Проверьте заголовки в ответе сервера PHP cURL:

$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_HEADER, 1);
curl_setopt($curlHandle, CURLOPT_NOBODY, 1);
curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);

$redirectResponse = curl_exec($curlHandle);

Установленные там параметры означают: вернуть заголовки ответа, не возвращать тело ответа, не автоматически следовать перенаправлениям и возвращать результат в exec-вызове.

Теперь у вас есть заголовки ответа HTTP, без тела, в $redirectResponse, Теперь вам нужно убедиться, что это перенаправление:

$statusCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
if ($statusCode == 301 || $statusCode == 302 || $statusCode == 303)
{
$headerLength = curl_getinfo($curlHandle, CURLINFO_HEADER_SIZE);
$responseHeaders = substr($redirectResponse, 0, $headerLength);
$redirectUrl = getLocationHeader($responseHeaders);
}

Затем создайте функцию для этого:

function getLocationHeader($responseHeaders)
{

}

Там вы захотите explode() $responseHeaders по новой строке HTTP (\r\n) и найдите заголовок, начинающийся с location,


Кроме того, вы можете использовать более абстрактную клиентскую библиотеку HTTP лайк Zend_Http_Client, где немного легче получить заголовки.

1

Другие решения

Я сделал это, как сказал CodeCaster. Это моя функция ‘getLocationHeader’:

function getLocationHeader($responseHeaders)
{
if (preg_match('/Location:(.+)Vary/is', $redirectResponse, $loc))
{
$location = trim($loc[1]);
return $location;
}
return FALSE;
}

0

По вопросам рекламы [email protected]