2017-09-26 8 views
0

tl; dr Je veux télécharger un fichier à partir d'un serveur qui ne permet que certains User-Agents. J'ai réussi à obtenir un 200 OK du site en utilisant le code suivant:Comment puis-je télécharger un fichier dans Python3 avec urlopen() ou ajouter des en-têtes personnalisés à urlretrieve()?

opener = urllib.request.build_opener() 
opener.addheaders = [('User-Agent', 'Interwebs Exploiter 4')] 
opener.open(url) 

Depuis le fichier peut être un .pdf ou .zip ou un autre format, je veux le télécharger sans l'analyse syntaxique ou lire. Urlretrieve() semble être une bonne idée, mais il utilise l'en-tête par défaut, ce qui rend le serveur 403 Forbidden.

Comment puis-je soit télécharger le fichier en utilisant cet ouvreur intégré personnalisé ou simplement ajouter des en-têtes à urlretrieve()?

Et this example dans le Python Docs est un charabia complet pour moi.

Répondre

1

J'utiliser requests pour que:

import requests 

headers = {'User-Agent': 'Interwebs Exploiter 4'} 

r = requests.get(url, allow_redirects=True, headers=headers) 
    with open(filename, 'wb') as f: 
     for chunk in r.iter_content(1024): 
      f.write(chunk) 

À moins qu'il est absolument essentiel pour une raison d'utiliser urllib

+0

Toute façon de le faire sans avoir à installer des dépendances supplémentaires? – stendarr