6
votes

Comment vérifier le code d'état HTTP d'un objet sans le télécharger?

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

0 commentaires

3 Réponses :


0
votes

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.

meilleur mais ... vous pouvez envoyer une demande HTTP Head à l'aide de httplib à la place de faire le HTTP obtenir que votre code urllib.


5 commentaires

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é.



1
votes

Oui, il va chercher le fichier.

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 .


0 commentaires

18
votes

Vous voulez dire réellement au serveur pas 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.

Essayez ceci: xxx

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".


1 commentaires

Dans PY3K, il est http.client au lieu de httplib et le reste est exactement identique.