ChatGPT解决这个技术问题 Extra ChatGPT

OS X:相当于 Linux 的 wget

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


M
Mark Amery

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


此外,wget 可通过 MacPortsFink 使用。
我通过 Google 搜索如何在 Mac 上获取 wget 来到这里,因此尽管 OP 要求避免安装第 3 方软件,但我将提供指向我在 how to install wget without using MacPorts 上找到的快速指南的链接以供将来参考。
它也可以在 Homebrew 上找到。
好像没有跟上。
对于下载文件,您可以使用 -O--remote-name 标志来自动重命名下载的文件。例如curl -O http://somehost.org/file.zip
E
Eric Hartford

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.stackoverflow.com/questions/315892/…
@EricHartford 拒绝投票并不能解决问题。它提供了一种选择,但没有列出如何手动安装 wget 的另一种选择。
我认为你有一个很好的观点。我将编辑答案以纳入您的想法。
C
Community

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

curl -O <url>

这就像

wget <url>

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

alias wget='curl -O'

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


你怎么用这个递归?
您可以使用 bash 将其添加到这样的循环中:for i in `seq 1 <n>` do curl -O <url>;done; where <n>是你想要迭代的次数和 <url>是要拉的网址。
有时您需要添加 -L 标志来跟踪位置重定向。您可以使用 curl -OL <url> 来做到这一点。
-O 也仅适用于下一个参数,因此要下载多个 URL,您必须使用 curl -O "$url1" -O "$url2"printf %s\\n "$url1" "$url2"|xargs -n1 curl -O 之类的东西。
这是一个很棒的技巧。太感谢了!
Z
Zizouz212

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”工作得很好,感谢我的用例在这个线程中提供了这个唯一可行的解决方案。
须藤纳米/usr/bin/wget
i
ismail

使用curl

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

O
Oliver Schafeld

这是 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 参数才能输出到文件而不是屏幕上。为重命名下载的文件指定不同的目标名称。

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


H
Hammad Haleem

您可以在 mac 机器上构建 wget 或使用 MacPorts 直接安装它。

sudo port install wget 

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

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


以及如何安装端口?
J
Jaya Konduru

您可以尝试“brew install wget”并使用 wget,而不是使用等价物。

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


不会投反对票,但这是埃里克在 2013 年 6 月 13 日回答的骗局。
J
James Sumners

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


B
Beejor

wget 预编译的 Mac 二进制文件

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

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

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅