Supposons que je haev un fichier vidéo:
http://mydomain.com/thevideofile.mp4 p>
Comment puis-je obtenir l'en-tête et le type de contenu de ce fichier? Avec python. Mais, je ne veux pas télécharger tout le fichier.
Je veux qu'il retourne: p> éditer: c'est ce que j'ai fait. Que pensez-vous? P> f = urllib2.urlopen(url)
params['mime'] = f.headers['content-type']
3 Réponses :
Comme: qui ne fera que télécharger et imprimer les en-têtes car il fabrique un Demande Demande: P> demande la réponse identique à celle qui correspondrait à un get
demande, mais sans la réponse
corps. Ceci est utile pour récupérer
méta-information écrit en réponse
en-têtes, sans avoir à transporter
tout le contenu. P>
BlockQuote> (via Wikipedia ) P> P> P> P >
Y a-t-il quelque chose de mal avec le mien? F = URLLIB2.URLOPEN (URL) paramètres ['MIME'] = F.Headers ['Type de contenu']
@ALEX: Oui, il téléchargera tout le fichier.
S'il vous plaît reformulation. Il ne téléchargera pas l'ensemble du fichier.
J'ai fait des tests avec Ettercap. Une demande de tête télécharge environ 400 octets, la manière dont Alex a suggéré de télécharger le premier 80k ou donc du fichier et laisse la connexion suspendue.
C'est une réponse de niveau plus élevée que celle de Brian. L'utilisation des machines URLLIB a les avantages habituels tels que la manipulation automatique des redirections automatiquement et ainsi de suite.
import urllib2 class HeadRequest(urllib2.Request): def get_method(self): return "HEAD" url = "http://mydomain.com/thevideofile.mp4" head = urllib2.urlopen(HeadRequest(url)) head.read() # This will return empty string and closes the connection print head.headers.maintype print head.headers.subtype print head.headers.type
Vous pouvez obtenir le type de vidéo à l'aide de la méthode Info () ou des en-têtes DICT
$ cat test.py #!/usr/bin/env python import urllib2 url="http://www.merseypirates.com/rjnsteve/rjnsteve/oem16.avi" f=urllib2.urlopen(url) print f.headers['Content-Type'] $ time python test.py video/x-msvideo real 0m4.931s user 0m0.115s sys 0m0.042s
Qui téléchargera tout le fichier.
Téléchargez tout le fichier? Comme dans le téléchargement sur local et j'ai donc un fichier physique réel? Non, ce ne sera pas. En outre, op demande ce qui ne va pas avec cette méthode, alors je le montrais là où il a tort.
Il fera une demande qui sera Télécharger B> tout le fichier. Bien sûr, il ne sera pas stocké à votre système de fichiers, mais la demande bloquera et décheter la bande passante pour aucune raison i>.
Non ce ne sera pas. Si vous lisez les documents, Urlopen renvoie un fichier comme objet. C'est pourquoi vous pouvez faire des choses comme la réponse.Lead (). C'est seulement lorsque vous lisez () alors "la bande passante est gaspillée"
Essaye le. Téléchargez quelque chose comme CharlesProxy.com et voir combien de fois les téléchargements de la demande dans une réplique active. URLOPEN CODE> Blocs jusqu'à ce qu'il obtienne les en-têtes et
longueur de contenu code> de sorte qu'il peut semble i> instantané, mais il télécharge en réalité le contenu en arrière-plan. Lorsque vous
lisez code>, des blocs Python pour le contenu. Donc Il utilise la bande passante B> lorsque vous appelez
urlopen code> - juste à l'arrière-plan i>.
Ensuite, vous devriez avoir défini clairement "Télécharger le fichier entier" clairement. Avec un fichier AVI de 600 + MB, il ne faut que quelques secondes pour obtenir ces en-têtes.
urlopen (URL) code> téléchargera tout le fichier pour obtenir les en-têtes. Une solution consiste à utiliser une demande personnalisée qui indiquera Urlopen d'utiliser la tête pour ouvrir l'URL au lieu d'obtenir
FORVEURE Le test montre que l'ensemble du fichier n'est pas téléchargé, juste un morceau de taille arbitraire et la connexion reste ouverte jusqu'à ce que
f code> est hors de portée - il s'agit d'un peu de mauvaise chose à faire sur le serveur.