cURL получить итоговый url после редиректа, редиректов

12
S
На сайте с 13.11.2012
Offline
72
5827

Пытаюсь получить итоговый url адрес по реферальной ссылке.

Оказалось, что прежде чем перейти на основной сайт, ссылка делает 2 редиректа

Выполняю код

// инициализация сеанса
$ch = curl_init();

// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$url = 'http://gpclick.ru/affiliate/8258228';
$headers = get_headers($url, 1);
print_r($headers['Location']);

Результат

Как получить чистый итоговый url - http://www.joysignals.ru ?

twitter.com при этом вообще отказывается выдавать результат по ссылкам вида https://t.co/oIPiZmAfXI - из-за чего это может быть?

Спасибо!

S
На сайте с 13.11.2012
Offline
72
#1

По ссылкам вида https://t.co/oIPiZmAfXI как и по остальным редиректам ходить научился, а вот извлекать на старте конечный url - нет :(

dma84
На сайте с 21.04.2009
Offline
168
#2

array_pop($headers)?

SocFishing
На сайте с 26.09.2013
Offline
118
#3

Smirnof,

Вот так, дальше регулярку натравливай и получай location

<?php   

var_dump(get_headers('https://t.co/oIPiZmAfXI'));
★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
MT
На сайте с 17.01.2017
Offline
22
#4

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

S
На сайте с 13.11.2012
Offline
72
#5

У меня с регулярками проблемы...

MikeTheRaven, спасибо!

Получил с помощью $last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); итоговый url адрес, теперь думаю как преобразовать его в имя домена http://site.ru из http://site.ru/vasy/pupkin/news.html и др.

SocFishing
На сайте с 26.09.2013
Offline
118
#6
S
На сайте с 13.11.2012
Offline
72
#7

Нет, не смог вытащить url

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

print_r($last_url);

как из print_r($last_url); или до его вывода получить домен не пойму.

---------- Добавлено 24.06.2017 в 14:22 ----------

помогите составить запрос для поисковиков... нахожу только регулярку которая вытаскивает имя домена а мне нужно еще и протокол

S
На сайте с 13.11.2012
Offline
72
#8

Делаю так


............
// Получаю итоговый url после всех редиректов
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

echo $last_url; ОТОБРАЖАЕТ URL http://site.ru/vasy/pupkin/news.html !


// Функция которая должна получить url из $last_url site.ru (пусть без протокола но хотя бы так)

function baseUrl() {

$url = "$last_url"; //так тоже делал $url = '$last_url';
$host = parse_url( preg_match('#^https?://#',$url) ? $url : 'http://'.$url, PHP_URL_HOST ) or die('Не верное имя домена');
return "</title>
<base href=\"{$host}\">";

}
..........

В итоге ничего не получается - Не верное имя домена

Я так понял, что $last_url не отображает url когда находится внутри function baseUrl() {

как исправить?

Помогите, пожалуйста.

danforth
На сайте с 18.12.2015
Offline
153
#9


$url = parse_url($last_url);
if ($url !== false) {
$final_url = $url['scheme'] . '://' . $url['host'];
if (isset($url['port']) {
$final_url .= ':' . $url['port'];
}

// $final_url - то что вам нужно
} else {
// что-то не так с URL
}
Junior Web Developer
nezabor
На сайте с 19.07.2010
Offline
152
#10

можно еще интереснее

$url = 'http://site.ru/vasy/pupkin/news.html';

$url = 'http://'.explode('/', substr($url, 7))['0'];
Чудес не бывает...
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий