2009-04-14 13 views
13

Sto solo imparando Python ed è interessato a come questo può essere realizzato. Durante la ricerca per la risposta, mi sono imbattuto in questo servizio: http://www.longurlplease.comPython: Converti quelli TinyURL (bit.ly, tinyurl, ow.ly) in URL completi

Ad esempio:

http://bit.ly/rgCbf possono essere convertiti in:

http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place

Ho fatto qualche controllo con Firefox e vedere che il l'url originale non è nell'intestazione.

+1

Qual è la domanda? –

risposta

33

Enter urllib2, che offre il modo più semplice per farlo:

>>> import urllib2 
>>> fp = urllib2.urlopen('http://bit.ly/rgCbf') 
>>> fp.geturl() 
'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place' 

Per l'amor di riferimento, tuttavia, notare che questo è possibile anche con httplib:

>>> import httplib 
>>> conn = httplib.HTTPConnection('bit.ly') 
>>> conn.request('HEAD', '/rgCbf') 
>>> response = conn.getresponse() 
>>> response.getheader('location') 
'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place' 

E con PycURL, anche se Non sono sicuro se questo è il modo migliore per farlo usando:

>>> import pycurl 
>>> conn = pycurl.Curl() 
>>> conn.setopt(pycurl.URL, "http://bit.ly/rgCbf") 
>>> conn.setopt(pycurl.FOLLOWLOCATION, 1) 
>>> conn.setopt(pycurl.CUSTOMREQUEST, 'HEAD') 
>>> conn.setopt(pycurl.NOBODY, True) 
>>> conn.perform() 
>>> conn.getinfo(pycurl.EFFECTIVE_URL) 
'http://webdesignledger.com/freebies/the-best-social-media-icons-all-in-one-place' 
+5

È preferibile utilizzare una richiesta HEAD anziché una GET per evitare il trasferimento del contenuto della pagina. urllib e curl possono fare HEAD, anche se httplib non lo fa, credo. –

+0

Ah, si. Grazie. –

+1

Aggiornato, httplib non si è lamentato del TESTO ... è quello che ha detto. –