2009-04-14 3 views
13

Ich lerne gerade Python und bin daran interessiert, wie dies erreicht werden kann. Während der Suche nach der Antwort, ich auf diesen Dienst kam: http://www.longurlplease.comPython: Konvertiere diese TinyURL (bit.ly, tinyurl, ow.ly) in vollständige URLs

Zum Beispiel:

http://bit.ly/rgCbf können umgewandelt werden:

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

Ich habe einige mit Firefox Inspektion und sehen, dass die Original-URL ist nicht in der Kopfzeile.

+1

Was ist die Frage? –

Antwort

33

Geben Sie urllib2, die den einfachsten Weg bietet, dies zu tun:

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

Aus Gründen der Bezugnahme jedoch beachten, dass dies auch mit httplib möglich ist:

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

Und mit PycURL, obwohl Ich bin mir nicht sicher, ob dies der beste Weg ist, es zu benutzen:

>>> 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 ist eine bessere Idee, anstelle eines GET eine HEAD-Anfrage zu verwenden, um den Inhalt der Seite nicht zu übertragen. Urllib und Curl können HEAD, obwohl httplib nicht, glaube ich. –

+0

Ah, ja. Vielen Dank. –

+1

Aktualisiert, httplib hat sich nicht über den HEAD beschweren ... das ist, was sie gesagt hat. –

Verwandte Themen