OS X:相当于Linux的wget


497

如何在普通OS X系统上从Un * x shell脚本中进行HTTP GET?(不能选择安装第三方软件,因为它必须在许多我无法控制的系统上运行)。

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

... $ hg serve 

然后,从具有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

在我启动“ hg serve”命令的终端上,我确实可以看到HTTP GET成功实现了:

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

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

还有什么其他方法可以完成wget的工作?我特别希望能在OS X的现有安装中使用的东西。


Answers:


712

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


27
另外,可以通过MacPortsFink使用wget
Brian Clapper 2010年

47
我来自Google搜索,了解如何在Mac上获取wget,因此,尽管OP要求避免安装第三方软件,但我仍将提供指向我在其中找到的快速指南的链接。 如何在不使用MacPorts的情况下安装wget的信息。参考。
Eirik H

32
在Homebrew上也可以使用。
丹尼尔说,请

2
似乎没有跟进。
nroose

14
对于下载文件,您可以使用-O--remote-name标记来自动重命名下载的文件。例如curl -O http://somehost.org/file.zip
nimcap

461

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

或者,使用bash别名:

function _wget() { curl "${1}" -o $(basename "${1}") ; };
alias wget='_wget'

11
您可能需要花一些时间来解释自制程序,但是这里必须有一个新手可见的wget答案,这很重要,因为唯一的一个答案是所有者删除的,并且curl是替代方法,而不是字面意义上的等效方法。
克里斯·斯特拉顿

2
谢谢,这对我已经安装了brew的人很有帮助。
enderland

4
@Michaelangelo这不是破坏他人帖子的工作。您不应该编辑其他答案来提出自己的观点-这是不合适的。:事实上,在行动上正在讨论的Meta meta.stackoverflow.com/questions/315892/...
Zizouz212

2
@EricHartford不能投票解决问题。它提供了一种选择,而没有列出如何手动安装wget 的一种选择。
Michaelangel007 '02

1
我认为你有一个好点。我将编辑答案以纳入您的想法。
埃里克·哈特福德

87

Curl具有几乎等同于默认wget的模式。

curl -O <url>

这就像

wget <url>

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

alias wget='curl -O'

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


2
您如何对此进行递归?
2015年

您可以使用bash将其添加到循环中,如下所示:for i in `seq 1 <n>` do curl -O <url>;done;其中<n>是要迭代的次数,而<url>是要提取的URL。
布莱尔

1
有时,您需要添加-L标记以跟随位置重定向。您可以curl -OL <url>用来做到这一点。
Gustavo Straube

1
-O也仅适用于下一个参数,因此要下载多个URL,您必须使用curl -O "$url1" -O "$url2"printf %s\\n "$url1" "$url2"|xargs -n1 curl -O
nisetama '16

这是一个很好的提示。非常感谢!
cmcromance

42

1)在您的Mac类型上

nano /usr/bin/wget

2)将以下内容粘贴到

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

3)关闭然后使其可执行

chmod 777 /usr/bin/wget

而已。


比别名更好。
2014年

3
几乎正确。我相信第一步应该是vim /usr/bin/wget;)哈哈,只是在开玩笑。感谢您的回答-这对我来说从未真正发生过,并且由于某种原因,我不想安装brew / fink /任何东西,因此对简单易用的答案表示赞赏。
卡萨波,2015年

3
-L对于处理http 301响应非常重要。wget默认处理它们。
唐·李

“ curl -L resource.url / tar.tar.gz -O tar.tar.gz”工作正常,这要归功于我的用例中唯一可行的解​​决方案。
Oleksii Kyslytsyn

sudo nano / usr / bin / wget
Vino


12

这是等同于Linux wget的Mac OSX。

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

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

在Mac上,即用于本地开发,请使用以下命令:

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

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

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


5

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

sudo port install wget 

这将像一种魅力一样起作用,您也可以在可用时立即更新到最新版本。尽管配方和端口数量要少得多,但是端口比brew更稳定。

您可以https://www.macports.org/install.php通过下载.pkg文件并安装来安装MacPorts 。


以及如何安装端口?
罗伊·洛夫乔伊



2

wget预编译的Mac Binary

对于那些希望在Mac上快速安装wget的用户,请在此处查看Quentin Stafford-Fraser的预编译二进制文件,该文件已经存在了十多年了:

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

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

没有make / install / port / brew / curl垃圾。只需下载,安装和运行即可。适用于Mac OS X 10.3-10.12 +。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.