2011-12-07 13 views
5

mam napisać tę funkcję:jak sprawdzić, czy urllib2 postępuje zgodnie z przekierowaniem?

def download_mp3(url,name): 
     opener1 = urllib2.build_opener() 
     page1 = opener1.open(url) 
     mp3 = page1.read() 
     filename = name+'.mp3' 
     fout = open(filename, 'wb') 
     fout.write(mp3) 
     fout.close() 

Ta funkcja podjęcia url i nazwy zarówno jako ciąg. Następnie pobierzesz i zapiszesz plik MP3 z adresu URL, podając nazwę zmiennej.

URL ma postać http://site/download.php?id=xxxx gdzie xxxx jest identyfikatorem mp3

jeśli to id nie istnieje witryny przekierowuje mnie do innej strony.

Pytanie brzmi: jak mogę sprawdzić, czy ten identyfikator istnieje? Próbowałem sprawdzić, czy istnieje url z funkcji takich jak to:

def checkUrl(url): 
    p = urlparse(url) 
    conn = httplib.HTTPConnection(p.netloc) 
    conn.request('HEAD', p.path) 
    resp = conn.getresponse() 
    return resp.status < 400 

Ale to nie wydaje się pracować ..

Dziękuję

Odpowiedz

5

coś takiego, i sprawdzić kod:

import urllib2, urllib 

class NoRedirectHandler(urllib2.HTTPRedirectHandler): 
    def http_error_302(self, req, fp, code, msg, headers): 
     infourl = urllib.addinfourl(fp, headers, req.get_full_url()) 
     infourl.status = code 
     infourl.code = code 
     return infourl 
    http_error_300 = http_error_302 
    http_error_301 = http_error_302 
    http_error_303 = http_error_302 
    http_error_307 = http_error_302 

opener = urllib2.build_opener(NoRedirectHandler()) 
urllib2.install_opener(opener) 
response = urllib2.urlopen('http://google.com') 
if response.code in (300, 301, 302, 303, 307): 
    print('redirect') 
1

Moja odpowiedź na to wyglądało

req = urllib2.Request(url) 
try: 
    response = urllib2.urlopen(url) 
except urllib2.HTTPError as e: 
    # Do something about it 
    raise HoustonWeHaveAProblem 
else: 
    if response.url != url: 
     print 'We have redirected!' 
+1

Czy nie byłoby **, jeśli response.geturl()! = Url: **? – alfadog67

Powiązane problemy