OS X:相当于Linux的wget

Syn*_*r0r 473 unix macos shell http-get

如何从库存OS X系统上的Un*x shell脚本执行HTTP GET?(安装第三方软件不是一种选择,因为这必须在我无法控制的许多不同系统上运行).

例如,如果我在本地启动Mercurial服务器执行hg服务:

... $ hg serve 
Run Code Online (Sandbox Code Playgroud)

然后,从具有wget命令的Linux 我做一个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
Run Code Online (Sandbox Code Playgroud)

在我发起"hg serve"命令的终端上,我确实可以看到HTTP GET成功了:

127.0.0.1 - - [30/Dec/2010 22:18:17] "GET / HTTP/1.0" 200 -
Run Code Online (Sandbox Code Playgroud)

所以在Linux上,从shell脚本执行HTTP GET的一种方法是使用wget(如果当然安装了该命令).

有什么其他方法可以做相当于一个wget?特别是我正在寻找可以在OS X安装上运行的东西.

Sie*_*geX 670

我不得不说 curl http://127.0.0.1:8000 -o outfile

  • 我是从Google搜索到如何在Mac上获取wget的,所以尽管OP要求避免安装第三方软件,但我会提供一个指向我在[如何在不使用MacPorts的情况下安装wget]的快速指南的链接(http://osxdaily.com/2012/05/22/install-wget-mac-os-x/)供将来参考. (47认同)
  • 它也可以在Homebrew上找到. (30认同)
  • 此外,*wget*可通过[MacPorts](http://www.macports.org/)和[Fink](http://www.finkproject.org/)获得. (27认同)
  • 对于下载文件,您可以使用`-O`或`--remote-name`标志自动重命名下载的文件.例如`curl -O http:// somehost.org/file.zip` (12认同)
  • 似乎没有跟进前进. (2认同)
  • 您可能想要使用“curl -LO”,因为“wget”遵循重定向。 (2认同)

Eri*_*ord 449

brew install wget

Homebrew是OSX的包管理器,类似于yum,apt-get,choco,emerge等.请注意,您还需要安装Xcode和命令行工具.事实上,任何在OSX中使用命令行的人都会想要安装这些东西.

如果您不能或不想使用自制软件,您还可以:

手动安装wget:

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
Run Code Online (Sandbox Code Playgroud)

或者,使用bash别名:

function _wget() { curl "${1}" -o $(basename "${1}") ; };
alias wget='_wget'
Run Code Online (Sandbox Code Playgroud)

  • 您可能需要花一点时间来解释自制软件,但重要的是这里有一个新手可见的`wget`答案,因为它的所有者删除了唯一的另一个答案,而`curl`是一个替代而不是文字等价物. (9认同)
  • @Michaelangelo这不是你的工作来破坏别人的帖子.你不应该编辑其他答案来提出自己的观点 - 这是不合适的.事实上,正在讨论Meta的行动:http://meta.stackoverflow.com/questions/315892/should-i-rollback-an-edit-that-i-reviewed-and-rejected (4认同)
  • 我喜欢他如何使用curl手动安装wget. (3认同)
  • 谢谢,这对我来说很有帮助,因为已经安装了brew的人. (2认同)
  • @EricHartford投票不能解决问题.它提供了*one*替代,没有列出如何手动安装wget的**其他**选项. (2认同)

小智 83

Curl的模式几乎等于默认的wget.

curl -O <url>
Run Code Online (Sandbox Code Playgroud)

这就像

wget <url>
Run Code Online (Sandbox Code Playgroud)

而且,如果您愿意,可以将其添加到.bashrc中:

alias wget='curl -O'
Run Code Online (Sandbox Code Playgroud)

它不是100%兼容,但它适用于最常见的wget用法(IMO)

  • 你怎么用这个递归? (2认同)

小智 41

1)在你的mac类型上

nano /usr/bin/wget
Run Code Online (Sandbox Code Playgroud)

2)粘贴以下内容

#!/bin/bash
curl -L $1 -o $2
Run Code Online (Sandbox Code Playgroud)

3)关闭然后使其可执行

chmod 777 /usr/bin/wget
Run Code Online (Sandbox Code Playgroud)

而已.

  • 差不多正确.我相信第一步应该是`vim/usr/bin/wget`虽然;)哈哈只是开个玩笑.谢谢你的回答 - 这从来没有真正发生在我身上,由于某种原因,我不想安装brew/fink /无论如何,所以感谢便携式答案. (3认同)
  • `-L`对于处理http`301`响应很重要.wget默认处理它们. (3认同)

ism*_*ail 16

使用curl;

curl http://127.0.0.1:8000 -o index.html
Run Code Online (Sandbox Code Playgroud)


Oli*_*eld 10

这是Mac OS X相当于Linux的wget.

对于Linux,例如AWS实例上的Ubuntu,请使用:

wget http://example.com/textfile.txt
Run Code Online (Sandbox Code Playgroud)

在Mac上,即本地开发,请使用:

curl http://example.com/textfile.txt -o textfile.txt
Run Code Online (Sandbox Code Playgroud)

Mac上需要-o参数才能输出到文件而不是屏幕上.指定其他目标名称以重命名下载的文件.

使用大写 -O用wget重命名.小写-o将指定传输日志的输出文件.


小智 6

您可以尝试"brew install wget"并使用wget,而不是使用等效的.

您需要在Mac中安装brew.

  • 不会投反对票,但这是埃里克 2013 年 6 月 13 日回答的骗局。 (4认同)

Ham*_*eem 5

您可以在mac机器上构建wget,也可以使用MacPorts直接安装它.

sudo port install wget 
Run Code Online (Sandbox Code Playgroud)

这可以像魅力一样,你也可以尽快更新到最新版本.港口比啤酒更稳定,但配方和港口的数量要少得多.

您可以从中安装MacPorts,https://www.macports.org/install.php然后下载该.pkg文件并进行安装.