Aquí un código src que tiene en cuenta casi de los casos de esquina útiles:
- conjunto un tiempo de espera personalizado.
- configura un agente de usuario personalizado.
- compruebe si tenemos que usar una conexión http o https.
- resuelven recursivamente la url de entrada y evitan que finalice dentro de un bucle.
El código src está en GitHub @https://github.com/amirkrifa/UnShortenUrl
comentarios son bienvenidos ...
import logging
logging.basicConfig(level=logging.DEBUG)
TIMEOUT = 10
class UnShortenUrl:
def process(self, url, previous_url=None):
logging.info('Init url: %s'%url)
import urlparse
import httplib
try:
parsed = urlparse.urlparse(url)
if parsed.scheme == 'https':
h = httplib.HTTPSConnection(parsed.netloc, timeout=TIMEOUT)
else:
h = httplib.HTTPConnection(parsed.netloc, timeout=TIMEOUT)
resource = parsed.path
if parsed.query != "":
resource += "?" + parsed.query
try:
h.request('HEAD',
resource,
headers={'User-Agent': 'curl/7.38.0'}
}
)
response = h.getresponse()
except:
import traceback
traceback.print_exec()
return url
logging.info('Response status: %d'%response.status)
if response.status/100 == 3 and response.getheader('Location'):
red_url = response.getheader('Location')
logging.info('Red, previous: %s, %s'%(red_url, previous_url))
if red_url == previous_url:
return red_url
return self.process(red_url, previous_url=url)
else:
return url
except:
import traceback
traceback.print_exc()
return None
¿Está hablando de un servicio de acortamiento de URL específico, y este servicio tiene una API de la que puede recuperar la información? – JAL