|
Il y a actuellement 6 visiteurs connectés sur le site !
Télécharger avec wget
Introduction
Avez-vous déjà essayé de télécharger un fichier si gros depuis un lien si lent que devez garder votre navigateur connecté pendant des heures voire des jours ? Que faire si vous disposez de 40 fichiers en lien sur une seule page, qu'il vous les faut tous -- allez-vous péniblement cliquer sur chacun? Que faire si le navigateur plante avant que vous ayez terminé? GNU/Linux est équipé d'un certain nombre d'outils de téléchargement en tâche de fond, indépendamment du navigateur. Cela permet de se déconnecter, de reprendre des téléchargements interrompus et même de les programmer afin qu'ils se produisent lors des heures creuses
Les navigateurs sont destinés à rendre le web interactif -- cliquez et attendez le résultat après quelques secondes. Mais il existe nombre de fichiers pour lesquels le téléchargement peut prendre plus de quelques secondes, même avec la plus rapide des connexions. Par exemple, les images ISO images, populaires parmi ceux qui gravent leur propre distribution GNU/Linux. Quelques navigateur web, particulièrement ceux mal codés, se comportent mal lors de longues vacations, manquant de mémoire ou bien plantant au moment le moins opportun. Malgré la fusion de quelques navigateurs avec des gestionnaires de téléchargement, nombre d'entre eux ne prennent pas encore en charge les sélections multiples et les opérations d'étirement qui facilitent le transfert de plusieurs fichiers à la fois. Vous devez également rester connecté jusqu'à ce que le téléchargement soit fini. Finalement, vous devez rester au bureau pour cliquer sur le lien démarrant le téléchargement, au risque d'irriter vos collègues avec qui vous partagez la bande passante.
Le téléchargement de gros fichiers est une tâche qui convient mieux à certains type d'outils. Cet article présente comment combiner différents utilitaires GNU/Linux, tels que lynx, wget, at, crontab, etc. pour résoudre nombre de téléchargements. Quelques scripts simples vont aussi être employés, donc il vous faut quelques notions de bash.
Wget
Toutes les distributions majeures incluent l'outil de téléchargement wget
bash$ wget http://place.your.url/here
Wget peut aussi prendre en charge le FTP, les estampilles de date et les miroirs récursifs de site web entier -- et si ne prenez garde, des sites web dans leur ensemble et les liens vers d'autres sites:
bash$ wget -m http://target.web.site/subdirectory
En raison de sa puissance de charge élevée, cet outil est destiné à un serveur, cet outil est respectueux du protocole robots.txt lors du mirroring. Il existe plusieurs options de commande pour contrôler exactement ce que wget établit en symétrie, limitant les types de liens suivis et les types de fichiers téléchargés. Exemple: pour suivre seulement les liens relatifs et omettre les images GIF:
bash$ wget -m -L --reject=gif http://target.web.site/subdirectory
wget peut aussi reprendre des téléchargements interrompus ("-c" option), une fois fourni le fichier incomplet avec les données restantes à ajouter. Cette opération doit être pris en charge par le serveur.
bash$ wget -c http://the.url.of/incomplete/file
La reprise et le mirroring peuvent être combinées, permettant de mettre en symétrie une grande collection de fichiers pendant une période de plusieurs sessions distinctes. Plus de précisions sur le processus d'automatisation plus tard.
Si vous subissez des interruptions de téléchargement aussi fréquentes que les miennes au travail, vous pouvez utiliser wget pour réessayer l'URL plusieurs fois:
bash$ wget -t 5 http://place.your.url/here
Ici nous abandonnons après 5 tentatives. Employez "-t inf" pour persévérer sans fin.
Et qu'en est-il des pare-feu de type proxy? Employez la variable d'environnement http_proxy du fichier de configuration .wgetrc pour spécifier un proxy avec lequel vous téléchargerez. Un des problèmes avec la connexion via proxy est que la reprise peut échouer en cas de connexion interrompue. Si un téléchargement via proxy est interrompu, le serveur proxy va mettre en cache une version incomplète du fichier. Quand vous essayer "wget -c" pour obtenir le reste de votre fichier, le proxy examine son cache et conclue par erreur que le fichier entier est déjà obtenu. Vous pouvez tromper la plupart des proxy en passant outre leur cache en ajoutant un en-tête spécial à votre requête de téléchargement:
bash$ wget -c --header="Pragma: no-cache" http://place.your.url/here
L'option "--header" peut ajouter n'importe quel nombre et de genre d'en-têtes, avec lesquels on peut modifier le comportement des serveurs web et des proxy. Quelques sites refusent de distribuer des fichiers via des liens extérieurs; le contenu est seulement délivré à des navigateurs s'ils y accèdent depuis quelques autres pages du même site. Vous pouvez remédier à cela en ajoutant un en-tête "Referer:":
bash$ wget --header="Referer: http://coming.from.this/page" http://surfing.to.this/page
Quelques sites web particulièrement antisociaux délivreront seulement du contenu à une catégorie particulière de navigateur. Surmontez ceci avec l'en-tête "User-Agent:" :
bash$ wget --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" http://msie.only.url/here
wget -r dupliquera l'arborescence téléchargée sur votre disque dur, pratique pour aspirer le contenu d'un site
wget -w, l'option w permet de spécifier un delai d'attente en secondes entre deux requetes
wget -np , ces options indiquent ne pas rapatrier de facon récursive les repertoires parents (ne pas oublier le / en fin d'url
wget -l , cette option permet de spécifier la profondeur de la récursivité de téléchargement
wget -p --convert-links http://www.monsite.fr/mapage.html permet de sauvegarder une page web dans son intégralité
Téléchargement horaire
Si vous téléchargez de gros fichiers à votre bureau avec une connexion que vous partagez avec des collègues qui n'aiment pas voir leur streaming ralenti, vous devriez songer à démarrer vos transferts hors des heures d'affluence. Vous n'avez pas à rester au bureau après vos heures, et vous n'avez pas non plus à vous souvenir de vous connecter à distance après diner.Employez un ordonnanceur de tâches:
bash$ at 2300
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D
Ici, nous demandons à commencer à télécharger à 23.00. Assurez-vous que le démon atd s'exécute en tâche de fond pour que cela fonctionne.
Téléchargement à la journée
Quand il y a beaucoup de données à télécharger depuis un ou plusieurs fichiers et que votre bande passante est comparable au protocole du pigeon voyageur, vous découvrirez que le téléchargement que vous avez programmé n'est pas encore fini à votre arrivée au bureau le matin. Étant un bon voisin, vous arrêtez la tâche et programmez une autre tâche, cette fois-ci avec "wget -c", répétant ceci selon les besoins autant de jours que nécessaire. IL est préférable de rendre ceci automatique avec un crontab. Créez un fichier texte, nommé "crontab.txt", contenant quelque chose de la sorte:
0 23 * * 1-5 wget -c -N http://place.your.url/here
0 6 * * 1-5 killall wget
Votre fichier crontab indiquera la tâche à exécuter à des intervalles périodiques. Les cinq premières colonnes indiquent quand exécuter la commande et le reste de chaque ligne ce qu'il faut exécuter. Les deux premières colonnes indiquent l'heure du jour -- 0 minutes après 23h pour démarrer wget, 0 minutes après 6h pour l'arrêter. Le * dans la 3ème et 4ème colonnes indiquent que ces actions arrivent chaque jour de chaque mois. La 5ème colonne indique quels jours de la semaine programmer chaque opération -- "1-5" veut dire de lundi à vendredi.
Ainsi chaque jour de la semaine à 23h, le téléchargement commencera pour finir à 6h du matin. Pour activer cette tâche, saisissez la commande suivante:
bash$ crontab crontab.txt
L'option "-N" de wget examinera le timestamp du fichier cible et cessera de télécharger si les deux concordent, ce qui est une indication selon laquelle le fichier entier a été transféré. Ainsi vous pouvez le mettre en place et l'oublier ensuite. "crontab -r" supprimera la tâche. J'ai téléchargé nombre d'images ISO avec des connections téléphoniques en utilisant cette méthode.
Pages web dynamiques
Quelques pages web sont générées à la demande car elles changent fréquemment parfois plusieurs fois par jour. Puisque la cible n'est pas techniquement un fichier, il n'y a pas de longueur de fichier et reprendre un téléchargement devient impossible -- l'option "-c" ne fonctionnera pas. Exemple: une page générée en PHP de Linux Weekend News:
bash$ wget http://lwn.net/bigpage.php3
Si vous stoppez le téléchargement est essayez de le reprendre, il repart au-delà du scratch. La connexion de mon bureau est certaines fois tellement faible que j'ai écrit un petit script pour détecter quand une page dynamique en HTML est chargée complètement:
#!/bin/bash
#create it if absent
touch bigpage.php3
#check if we got the whole thing
while ! grep -qi ' |