J'ai regardé la documentation des demandes, mais je n'arrive pas à trouver quoi que ce soit. Comment puis-je uniquement demander l'en-tête, afin de pouvoir évaluer la taille du fichier?
Envoyer un demande HEAD :
>>> import requests
>>> response = requests.head('http://example.com')
>>> response.headers
{'connection': 'close',
'content-encoding': 'gzip',
'content-length': '606',
'content-type': 'text/html; charset=UTF-8',
'date': 'Fri, 11 Jan 2013 02:32:34 GMT',
'last-modified': 'Fri, 04 Jan 2013 01:17:22 GMT',
'server': 'Apache/2.2.3 (CentOS)',
'vary': 'Accept-Encoding'}
Une demande HEAD est comme une demande GET qui télécharge uniquement les en-têtes. Notez que c'est au serveur d'honorer réellement votre demande HEAD. Certains serveurs ne répondre aux demandes GET, vous devrez donc envoyer une demande GET et simplement fermer la connexion au lieu de télécharger le corps. Parfois, le serveur ne spécifie jamais la taille totale du fichier.
utilisez requests.get(url, stream=True).headers['Content-length']
stream=True
signifie que lorsque la fonction revient, seul l'en-tête de la réponse est téléchargé, le corps de la réponse ne l'est pas .
Tous les deux requests.get
et request.head
peut vous obtenir des en-têtes mais il y a un avantage à utiliser get
get
est plus flexible, si vous voulez télécharger le corps de la réponse après avoir inspecté la longueur, vous pouvez commencer par accéder simplement à la propriété content
ou en utilisant un iterator
qui téléchargera le contenu en morceauxvoici un exemple pour obtenir la longueur d'un vidéo de cours ouvert du MIT
MitOpenCourseUrl = "http://www.archive.org/download/MIT6.006F11/MIT6_006F11_lec01_300k.mp4"
resHead = requests.head(MitOpenCourseUrl)
resGet = requests.get(MitOpenCourseUrl,stream=True)
resHead.headers['Content-length'] # output 169
resGet.headers['Content-length'] # output 121291539