Как я могу получить окончательный URL после перенаправления с помощью инструментов на основе Python, Django или оболочки? - PullRequest
0 голосов
/ 15 февраля 2011

Хорошо, я делаю проект Django, где у меня есть партнерские ссылки для разных сайтов. Поэтому я хочу иметь возможность автоматически определять, где будет находиться окончательный домен после всех перенаправлений, поскольку все партнерские ссылки будут принадлежать третьей стороне, а не месту назначения. Например, партнерская ссылка может выглядеть так:

   http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate       

но может в конечном итоге перенаправить на amazon.com, например. Есть ли что-нибудь в python (или внешняя утилита в linux), которое может дать мне знать, где я в конечном итоге после всех перенаправлений.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

По умолчанию urllib2.urlopen() следует за перенаправлениями.Ответ имеет метод geturl(), который возвращает адрес фактического места, где вы оказались.См. документацию .

1 голос
/ 15 февраля 2011

Вам не нужно никаких пользовательских инструментов для выполнения такой проверки.Базовых утилит оболочки достаточно:

curl -s --head --location 'http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate'|grep '^Location'|tail -n 1

Вышеприведенное будет следовать всем перенаправлениям и извлечет последний заголовок Location, который является конечным пунктом назначения.

0 голосов
/ 29 декабря 2011

Вы также можете попробовать FancyURLopener (http://docs.python.org/library/urllib.html#urllib.FancyURLopener),, он обрабатывает большинство случаев перенаправления, и, поскольку он подклассов urlopener, вы можете использовать geturl (). Итак, вы можете просто сказать:

fancy = urllib.FancyURLopener({})
link = fancy.open('http://some/affiliate/link')
final_link = link.geturl()

Прекрасно работает для меня:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...