# gghget: téléchargement multi-protocole gemini/gopher/http(s)/... 2024-01-21T15:52:23Z Pour un petit projet, je souhaite pouvoir télécharger en ligne de commande. Pour ça, wget, curl ou encore ftp sont disponibles. Cependant, ils ne supportent pas le protocole gemini, cela m'ennuie. Après un peu de recherche, il s'avère que curl, déjà présent sur ma machine, supporte à peu près tous les protocoles. => https://everything.curl.dev/protocols/curl Restait à trouver comment faire pour gemini. La commande openssl fait le job, il faut juste virer l'entête avec "sed '1d'" et on est bon :) Au final, ça donne le script suivant qui permet de préciser si on le souhaite le nom du fichier à écrire. J'aurais bien laissé vers stdout, mais ça met le bazar quand on récupère des binaires ^^. ``` #!/bin/sh # gghget : download file grom gemini, gopher or http(s) # require curl and openssl usage() { printf "usage: %s 'protocol://url/something' '[output_file]'\n" "$0" exit 1 } # remove ending "/" if any to get the filename if [ -z "$2" ]; then name="$(printf "$1" | awk -F/ '{sub("/+$", "", $0); print $NF}')" else name="$2" fi case "$1" in -h|--help|help) usage ;; gemini://*) # set default port if not specified next to domain in url host="$(printf "$1" | awk -F/ '$3 !~ /:[[:digit:]]+/ {$3=$3 ":1965"} END {print $3; exit}')" # sed will remove response header printf "$1\r\n" |\ openssl s_client -crlf -quiet -connect "${host}" 2>/dev/null |\ sed '1d' \ > "${name}" ;; *://*) curl \ -L \ -f \ -s \ -m 5 \ -H "User-Agent:" \ --compressed \ "$1" \ > "${name}" ;; *) printf "The URL must start with protocol://\n" ;; esac ``` Voir aussi hurl: => https://codemadness.org/hurl.html --- Une réaction? Envoyez votre commentaire par mail (anonyme): => mailto:bla@bla.si3t.ch?subject=gghget-wget-pour-tous-protocoles Voici quelques instructions pour utiliser la liste de diffusion et recevoir les réponses à vos messages: => https://si3t.ch/log/_commentaires_.txt