OS X: équivalent du wget de Linux

501

Comment puis-je faire un HTTP GET à partir d'un script shell Un * x sur un système OS X stock? (l'installation de logiciels tiers n'est pas une option, car cela doit fonctionner sur de nombreux systèmes différents sur lesquels je n'ai pas de contrôle).

Par exemple, si je démarre le serveur Mercurial localement en faisant un service hg :

... $ hg serve 

Et puis, depuis un Linux qui a la commande wget je fais un wget:

... $  wget http://127.0.0.1:8000
--2010-12-31 22:18:25--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... 200 Script output follows
Length: unspecified [text/html]
Saving to: `index.html

Et sur le terminal dans lequel j'ai lancé la commande "hg serve" , je peux en effet voir qu'un HTTP GET a fait son chemin:

127.0.0.1 - - [30/Dec/2010 22:18:17] "GET / HTTP/1.0" 200 -

Donc, sur Linux, une façon de faire un HTTP GET à partir d'un script shell est d'utiliser wget (si cette commande est bien sûr installée).

Quelles sont les autres façons de faire l'équivalent d'un wget ? Je recherche en particulier quelque chose qui fonctionnerait sur les installations OS X en stock.

SyntaxeT3rr0r
la source

Réponses:

713

Je vais devoir dire curl http://127.0.0.1:8000 -o outfile

SiegeX
la source
27
En outre, wget est disponible via MacPorts et Fink .
Brian Clapper
47
Je suis venu ici d'une recherche Google sur la façon d'obtenir wget sur Mac, donc malgré l'exigence du PO d'éviter l'installation de logiciels tiers, je fournirai un lien vers un guide rapide que j'ai trouvé sur la façon d'installer wget sans utiliser MacPorts pour l'avenir référence.
Eirik H
32
Il est également disponible sur Homebrew.
Daniel dit Réintégrer Monica
2
Ne semble pas suivre.
nroose
15
Pour télécharger des fichiers, vous pouvez utiliser -Oou --remote-namemarquer pour renommer automatiquement le fichier téléchargé. par exemplecurl -O http://somehost.org/file.zip
nimcap
463

brew install wget

Homebrew est un gestionnaire de paquets pour OSX analogue à yum, apt-get, choco, emerge, etc. Soyez conscient que vous devrez également installer Xcode et les outils de ligne de commande. Quasiment tous ceux qui utilisent la ligne de commande dans OSX voudront quand même installer ces choses.

Si vous ne pouvez pas ou ne voulez pas utiliser l'homebrew, vous pouvez également:

Installez wget manuellement:

curl -# "http://ftp.gnu.org/gnu/wget/wget-1.17.1.tar.xz" -o "wget.tar.xz"
tar xf wget.tar.xz
cd wget-1.17.1
./configure --with-ssl=openssl -with-libssl-prefix=/usr/local/ssl && make -j8 && make install

Ou utilisez un alias bash:

function _wget() { curl "${1}" -o $(basename "${1}") ; };
alias wget='_wget'
Eric Hartford
la source
11
Vous pourriez prendre un moment pour expliquer l'homebrew, mais il est important qu'il y ait une wgetréponse visible pour les débutants ici car la seule autre a été supprimée par son propriétaire, et curlest une alternative plutôt qu'un équivalent littéral.
Chris Stratton
2
Merci, cela m'a été utile en tant que personne avec une infusion déjà installée.
enderland
4
@Michaelangelo Et ce n'est pas votre travail de vandaliser les messages des autres. Vous ne devriez pas modifier d'autres réponses pour faire valoir vos propres points - c'est inapproprié. En fait, les actions sont en cours de discussion sur Meta: meta.stackoverflow.com/questions/315892/…
Zizouz212
2
@EricHartford Le vote négatif ne résout pas le problème. Il a fourni une alternative, sans énumérer l' autre option sur la façon d'installer manuellement wget.
Michaelangel007
1
Je pense que vous avez un bon point. Et je vais modifier la réponse pour incorporer vos idées.
Eric Hartford
87

Curl a un mode qui est presque équivalent au wget par défaut.

curl -O <url>

Cela fonctionne comme

wget <url>

Et, si vous le souhaitez, vous pouvez l'ajouter à votre .bashrc:

alias wget='curl -O'

Ce n'est pas 100% compatible, mais il fonctionne pour l'utilisation la plus courante de wget (IMO)

Ed Henderson
la source
2
comment faites-vous récursif avec cela?
Jasper
Vous pouvez utiliser bash pour ajouter ceci dans une boucle comme celle-ci: for i in `seq 1 <n>` do curl -O <url>;done;où <n> est le nombre de fois que vous souhaitez itérer et <url> est l'url à extraire.
Blairg23
1
Parfois, vous devrez ajouter le -Ldrapeau pour suivre les redirections d'emplacement. Vous pouvez utiliser curl -OL <url>pour cela.
Gustavo Straube
1
-Os'applique également uniquement à l'argument suivant, donc pour télécharger plusieurs URL, vous devez utiliser quelque chose comme curl -O "$url1" -O "$url2"ou printf %s\\n "$url1" "$url2"|xargs -n1 curl -O.
nisetama
C'est une excellente astuce. Merci beaucoup!
cmcromance
42

1) sur votre type de mac

nano /usr/bin/wget

2) collez ce qui suit dans

#!/bin/bash
curl -L $1 -o $2

3) fermez puis rendez-le exécutable

chmod 777 /usr/bin/wget

C'est ça.

Eamon Straughn
la source
Mieux qu'un alias.
MK
3
Presque correct. Je crois que la première étape devrait être vim /usr/bin/wgetbien;) haha ​​je plaisante. merci pour la réponse - cela ne m'est jamais vraiment venu à l'esprit et pour une raison quelconque, je n'ai pas envie d'installer brew / fink / quoi que ce soit, donc bravo pour la réponse portable facile.
Kasapo
3
-Lest important pour gérer les 301réponses http . wget les gère par défaut.
Donn Lee
"curl -L resource.url / tar.tar.gz -O tar.tar.gz" a bien fonctionné, merci pour cette seule solution réalisable parmi d'autres dans ce fil pour mon cas d'utilisation.
Oleksii Kyslytsyn
sudo nano / usr / bin / wget
Vino
18

Utilisation curl;

curl http://127.0.0.1:8000 -o index.html
ismail
la source
12

Voici l'équivalent Mac OS X du wget de Linux.

Pour Linux, par exemple Ubuntu sur une instance AWS, utilisez:

wget http://example.com/textfile.txt

Sur un Mac, c'est-à-dire pour le développement local, utilisez ceci:

curl http://example.com/textfile.txt -o textfile.txt

Le paramètre -o est requis sur un Mac pour la sortie dans un fichier plutôt qu'à l'écran. Spécifiez un nom cible différent pour renommer le fichier téléchargé.

Utilisez -O majuscule pour renommer avec wget. -O en minuscule spécifie le fichier de sortie pour le journal de transfert.

Oliver Schafeld
la source
5

Vous pouvez soit construire wget sur la machine mac, soit utiliser MacPorts pour l'installer directement.

sudo port install wget 

Cela fonctionnerait comme un charme, vous pouvez également mettre à jour vers la dernière version dès qu'elle est disponible. Le port est beaucoup plus stable que l'infusion, bien qu'il ait beaucoup moins de formules et de ports.

Vous pouvez installer MacPorts à partir de laquelle https://www.macports.org/install.phpvous pouvez télécharger le .pkgfichier et l'installer.

Hammad Haleem
la source
et comment installez-vous le port?
Roy Lovejoy
5

Au lieu d'aller avec l'équivalent, vous pouvez essayer "brew install wget" et utiliser wget.

Vous devez avoir installé brew dans votre mac.

Jaya Konduru
la source
1
Je ne vais pas voter contre, mais c'est une dupe d'Eric a répondu le 13 juin 13.
MarkHu
4

Vous pouvez utiliser à la curlplace. Il est installé par défaut dans /usr/bin.

James Sumners
la source
2

binaire Mac précompilé wget

Pour ceux qui recherchent une installation rapide de wget sur Mac, consultez le binaire précompilé de Quentin Stafford-Fraser ici, qui existe depuis plus d'une décennie:

https://statusq.org/archives/2008/07/30/1954/

MD5 pour 2008 wget.zip: 24a35d499704eecedd09e0dd52175582
MD5 pour 2005 wget.zip: c7b48ec3ff929d9bd28ddb87e1a76ffb

Pas de indésirable make / install / port / brew / curl. Téléchargez, installez et exécutez simplement. Fonctionne avec Mac OS X 10.3-10.12 +.

Beejor
la source