>>> a=urllib.urlopen('http://www.domain.com/bigvideo.avi')
>>> a.getcode()
404
>>> a=urllib.urlopen('http://www.google.com/')
>>> a.getcode()
200
My question is...bigvideo.avi is 500MB. Does my script first download the file, then check it? Or, can it immediately check the error code without saving the file?
3 Réponses :
Je pense que votre code le fait déjà. Vous n'appelez jamais la méthode Lecture () sur la réponse, vous ne téléchargez jamais le contenu du fichier. p>
meilleur mais ... vous pouvez envoyer une demande HTTP Head à l'aide de httplib à la place de faire le HTTP obtenir que votre code urllib. p>
Donc, cela signifie ... si je devais vérifier le code d'état d'un fichier 500gigaByte..Il ne prendrait qu'une seconde?
Ce n'est pas entièrement vrai. Parce que Urllib a envoyé une demande complète au serveur, le serveur commencera à le jeter, même s'il n'obtient pas à l'application.
Ken, je sais ce que tu veux dire, mais ses questions ont été comment le faire sans télécharger le fichier. et dans ce cas, aucun contenu n'est lu par le client après l'en-tête de réponse
@corey: Cela pourrait toujours bloquer et vous gaspillez la bande passante.
C'est vrai, mais ce qu'il veut vraiment, c'est la tête, qui ne déversera pas de la bande passante de chaque côté.
Oui, il va chercher le fichier. P>
Je pense que ce que vous voulez vraiment faire est d'envoyer une demande HTTP Head (qui demande essentiellement au serveur non pour les données elles-mêmes, mais pour les en-têtes uniquement). Vous pouvez regarder ici . P >
Vous voulez dire réellement au serveur pas em> d'envoyer le contenu complet du fichier. HTTP a un mécanisme pour cela appelé "Head" qui est une alternative à "GET". Cela fonctionne de la même manière, mais le serveur vous envoie uniquement les en-têtes, aucun du contenu réel. tandis que vous économiserez au moins une bande passante, tout en ne faisant pas de lecture () ne vous dérangera que Fichier. P> Essayez ceci: p> Le code d'état sera imprimé. L'URL ne devrait être qu'un segment, comme "/ foo" et un nom d'hôte devrait être comme "www.example.com". P> p>
Dans PY3K, il est code> http.client code> au lieu de httplib code> et le reste est exactement identique.