如何在现有的 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 安装的东西。
我不得不说curl http://127.0.0.1:8000 -o outfile
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
是一种替代方法,而不是字面上的等价物。
Curl 有一个几乎等同于默认 wget 的模式。
curl -O <url>
这就像
wget <url>
而且,如果您愿意,可以将其添加到您的 .bashrc 中:
alias wget='curl -O'
它不是 100% 兼容的,但它适用于最常见的 wget 用法(IMO)
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
之类的东西。
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
;
curl http://127.0.0.1:8000 -o index.html
这是 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 将指定传输日志的输出文件。
您可以在 mac 机器上构建 wget 或使用 MacPorts 直接安装它。
sudo port install wget
这就像一个魅力,你也可以在它可用时立即更新到最新版本。 Port 比 brew 稳定得多,尽管公式和端口的数量要少得多。
您可以从 https://www.macports.org/install.php
安装 MacPorts,也可以下载 .pkg
文件并安装它。
您可以尝试“brew install wget”并使用 wget,而不是使用等价物。
您需要在您的 Mac 中安装 brew。
您可以改用 curl
。它默认安装在 /usr/bin
中。
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+。
不定期副业成功案例分享
-O
或--remote-name
标志来自动重命名下载的文件。例如curl -O http://somehost.org/file.zip