2016-12-02 1 views
0

Je fais face à un bug étrange: urllib2 rattrape l'erreur 404, tout en ouvrant une URL valide. Je l'ai essayé dans le navigateur, l'URL peut être ouverte. Aussi, je passe user-agent.urllib2 rattrape l'erreur 404 alors que l'URL existe

import urllib.request as urllib2 
uri = 'https://i.ytimg.com/vi/8Sii8G5CNvY/hqdefault.jpg?custom=true&w=196&h=110&stc=true&jpg444=true&jpgq=90&sp=68&sigh=OIIIAPOKNtx1OiZbAqdORlzl92g' 
try: 
    req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' }) 
    file = urllib2.urlopen(req) 
except urllib2.HTTPError as err: 
    if err.code == 404: 
    return "Not Found" 

Pourquoi j'obtiens cette erreur? Merci pour les réponses.

+1

Eh bien, si vous testez le uri sur certains client HTTP avancé ou ouvrez la console de développement de votre navigateur Web, il vous jette une erreur 404. Ça semble fonctionner correctement. – fernandezr

+2

Le serveur auquel vous essayez d'accéder agit bizarrement: il répond par 404 suivi du fichier réel. L'outil de ligne de commande 'wget' ne parvient pas à obtenir le document, mais' curl' l'obtient. Il n'y a rien de mal avec votre code, apparemment 'urllib2' n'a pas été conçu pour gérer des situations comme celle-ci. – DyZ

+0

Mais comment puis-je le télécharger s'il s'agissait d'une erreur 404? Est-ce que je peux juste faire data = file.read (1024)? –

Répondre

1

Si vous voulez obtenir le corps de toute façon, il suffit de lire la réponse d'erreur avec un err.read():

import urllib2 
uri = 'https://i.ytimg.com/vi/8Sii8G5CNvY/hqdefault.jpg?custom=true&w=196&h=110&stc=true&jpg444=true&jpgq=90&sp=68&sigh=OIIIAPOKNtx1OiZbAqdORlzl92g' 
try: 
    req = urllib2.Request(uri, headers={ 'User-Agent': 'Mozilla/5.0' }) 
    file = urllib2.urlopen(req) 
except urllib2.HTTPError as err: 
    if err.code == 404: 
    print "Not Found" 
    print err.read()