python pycurl получить окончательный URL-адрес перенаправления

мне нужно посетить веб-сайт с pycurl, выполнить перенаправления и напечатать конечный URL-адрес, я пишу этот код Python:

c = pycurl.Curl()
c.setopt(c.URL, 'http://localhost/redirect.php')
c.setopt(c.HTTPPOST, values)
c.setopt(c.WRITEFUNCTION, buf_pagina.write)
c.setopt(c.HEADERFUNCTION, buf_header.write)
c.setopt(c.CONNECTTIMEOUT, 30)
c.setopt(c.AUTOREFERER,1)
c.setopt(c.FOLLOWLOCATION, 1)
c.setopt(c.COOKIEFILE, '')
c.setopt(c.TIMEOUT, 30)
c.setopt(c.USERAGENT, '')
c.perform()

мне нужно напечатать окончательный URL, как я могу это сделать? Спасибо.

решение таково: url_efficient = c.getinfo(c.EFFECTIVE_URL)


person kingcope    schedule 29.01.2014    source источник
comment
вам действительно нужно использовать pycurl? Если нет, попробуйте использовать requests, решение сделать то, что вы хотите, насколько я помню, действительно более очевидно.   -  person zmo    schedule 30.01.2014
comment
да, мне нужно использовать pycurl, это очень быстрая библиотека!   -  person kingcope    schedule 30.01.2014
comment
вот способ, который какой-то парень реализовал в php: forums.devshed.com/php-development-5/ хорошая вещь с curl, это то, что библиотека ведет себя одинаково на разных языках.   -  person zmo    schedule 30.01.2014


Ответы (1)


вот адаптация PHP-скрипта, на который я ссылался в комментариях:

import pycurl
import sys
import StringIO

o = StringIO.StringIO()
h = StringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.URL, 'http://stackoverflow.com/questions/21444891')
# c.setopt(c.HTTPPOST, values)
c.setopt(c.WRITEFUNCTION, o.write)
c.setopt(c.HEADERFUNCTION, h.write)
c.setopt(c.CONNECTTIMEOUT, 30)
c.setopt(c.AUTOREFERER,1)
c.setopt(c.FOLLOWLOCATION, 1)
c.setopt(c.COOKIEFILE, '')
c.setopt(c.TIMEOUT, 30)
c.setopt(c.USERAGENT, '')
c.perform()

h.seek(0)

location = ""

for l in h:
    if "Location" in l:
        location = l.split(": ")[-1]

print location

хотя, как показывает этот пример, у вас не всегда может быть полный URI, а только часть пути URI (но в этом случае легко добавить обратно полное доменное имя)

person zmo    schedule 29.01.2014