【问题标题】:OS X: equivalent of Linux's wgetOS X:相当于 Linux 的 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 安装的东西。

【问题讨论】:

标签: macos shell unix http-get


【解决方案1】:

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

【讨论】:

  • 另外,wget 可通过MacPortsFink 获得。
  • 我来自谷歌搜索如何在 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.stackoverflow.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:24a35d499704eecedd09e0dd52175582
        2005 wget.zip 的 MD5: c7b48ec3ff929d9bd28ddb87e1a76ffb

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-04
          • 1970-01-01
          • 2010-09-20
          • 1970-01-01
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          • 2014-03-27
          相关资源
          最近更新 更多