OS X:相当于 Linux 的 wget

Posted

技术标签:

【中文标题】OS X:相当于 Linux 的 wget【英文标题】:OS X: equivalent of Linux's wget 【发布时间】:2011-06-02 02:39:48 【问题描述】:

如何在现有的 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 安装的东西。

【问题讨论】:

也方便:mikebeach.org/2012/09/29/how-to-install-wget-in-mac-os-x 【参考方案1】:

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

【讨论】:

另外,wget 可通过MacPorts 和Fink 获得。 我来自谷歌搜索如何在 Mac 上获取 wget,因此尽管 OP 要求避免安装第 3 方软件,但我将提供指向我在 @ 上找到的快速指南的链接987654323@ 供将来参考。 Homebrew 上也有。 似乎没有跟上。 对于下载文件,您可以使用-O--remote-name 标志来自动重命名下载的文件。例如curl -O http://somehost.org/file.zip【参考方案2】:

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'

【讨论】:

您可能需要花一点时间来解释自制软件,但重要的是这里有一个新手可见的wget 答案,因为唯一的另一个答案已被其所有者删除,而curl 是另一种选择而不是字面上的等价物。 谢谢,作为已经安装了 brew 的人,这对我很有帮助。 @Michaelangelo 破坏别人的帖子不是你的工作。您不应该编辑其他答案来表达自己的观点 - 这是不合适的。事实上,这些行动正在 Meta 上讨论:meta.***.com/questions/315892/… @EricHartford 否决投票并不能解决问题。它提供了 one 替代方案,没有列出如何手动安装 wget 的 other 选项。 我认为你的观点很好。我将编辑答案以纳入您的想法。【参考方案3】:

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

curl -O <url>

这就像

wget <url>

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

alias wget='curl -O'

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

【讨论】:

你如何用这个递归? 您可以使用 bash 将其添加到这样的循环中:for i in `seq 1 &lt;n&gt;` do curl -O &lt;url&gt;;done; 其中 是您要迭代的次数, 是要拉取的 url。 有时您需要添加 -L 标志来跟踪位置重定向。你可以使用curl -OL &lt;url&gt; 来做到这一点。 -O 也仅适用于下一个参数,因此要下载多个 URL,您必须使用 curl -O "$url1" -O "$url2"printf %s\\n "$url1" "$url2"|xargs -n1 curl -O 之类的东西。 这是一个很棒的技巧。非常感谢!【参考方案4】:

1) 在您的 mac 类型上

nano /usr/bin/wget

2) 粘贴以下内容

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

3) 关闭然后使其可执行

chmod 777 /usr/bin/wget

就是这样。

【讨论】:

比别名好。 几乎正确。我相信第一步应该是vim /usr/bin/wget ;) 哈哈,开个玩笑。感谢您的回答——这对我来说从来没有真正发生过,出于某种原因,我不想安装 brew/fink/whatever,所以感谢这个简单便携的答案。 -L 对于处理 http 301 响应很重要。 wget 默认处理它们。 "curl -L resource.url/tar.tar.gz -O tar.tar.gz" 工作得很好,感谢这个线程中唯一可行的解​​决方案。 sudo nano /usr/bin/wget【参考方案5】:

使用curl

curl http://127.0.0.1:8000 -o index.html

【讨论】:

【参考方案6】:

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

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

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

在 Mac 上,即用于本地开发,使用这个:

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

在 Mac 上需要 -o 参数才能输出到文件而不是屏幕上。为重命名下载的文件指定不同的目标名称。

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

【讨论】:

【参考方案7】:

你可以在mac机器上构建wget,也可以使用MacPorts直接安装。

sudo port install wget 

这就像一个魅力,你也可以在最新版本可用时立即更新。 Port 比 brew 稳定得多,但公式和端口的数量要少得多。

您可以从https://www.macports.org/install.php 安装MacPorts,您可以下载.pkg 文件并安装它。

【讨论】:

你如何安装端口?【参考方案8】:

您可以尝试“brew install wget”并使用 wget。

您需要在您的 mac 中安装 brew。

【讨论】:

不会投反对票,但这是埃里克在 2013 年 6 月 13 日回答的骗局。【参考方案9】:

您可以改用curl。它默认安装到/usr/bin

【讨论】:

【参考方案10】:

wget 预编译的 Mac 二进制文件

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

https://statusq.org/archives/2008/07/30/1954/2008 wget.zip 的 MD5:24a35d499704eecedd09e0dd521755822005 wget.zip 的 MD5: c7b48ec3ff929d9bd28ddb87e1a76ffb

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

【讨论】:

以上是关于OS X:相当于 Linux 的 wget的主要内容,如果未能解决你的问题,请参考以下文章

OS X 相当于 SO_BINDTODEVICE

Linux (Fedora 13) 与 OS X 中的 sigwait

是否有相当于 FreeBSD 的 make_dev() 函数的 OS X?

python os模块

subprocess

Mac OS X 下的 _wfopen 等效项