2009-04-14 13 views
13

Estoy recién aprendiendo Python y estoy interesado en cómo se puede lograr esto. Durante la búsqueda de la respuesta, me encontré con este servicio: http://www.longurlplease.comPython: Convierta esos TinyURL (bit.ly, tinyurl, ow.ly) a URL completos

Por ejemplo:

http://bit.ly/rgCbf se puede convertir en:

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

he hecho un poco de inspeccionar con Firefox y ver que el la URL original no está en el encabezado.

+1

¿Cuál es la pregunta? –

Respuesta

33

Introduzca urllib2, que ofrece la forma más fácil de hacer esto:

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

Por el amor de referencia, sin embargo, tenga en cuenta que esto también es posible 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' 

Y con PycURL, aunque No estoy seguro si esta es la mejor manera de hacerlo utilizándolo:

>>> 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

Es una mejor idea usar una solicitud HEAD en lugar de un GET para evitar transferir el contenido de la página. urllib y curl pueden hacer HEAD, aunque httplib no, creo. –

+0

Ah, sí. Gracias. –

+1

Actualizado, httplib no se quejó de HEAD ... eso es lo que dijo. –

Cuestiones relacionadas