用腻了 wget 或 curl,有什么更好的替代品吗?

用腻了 wget 或 curl,有什么更好的替代品吗?

如果你经常需要通过终端以非交互模式访问网络服务器(例如,从网络上下载文件,或者是测试 RESTful 网络服务接口),可能你会选择的工具是 wget 或 curl。通过大量的命令行选项,这两种工具都可以处理很多非交互网络访问的情况(比如这里这里,还有这里)。然而,即使像这些一样的强大的工具,你也只能发挥你所了解的那些选项的功能。除非你很精通那些繁冗的语法细节,这些工具对于你来说只不过是简单的网络下载器而已。

就像其宣传的那样,“给人用 curl 类工具”,HTTPie 设计用来增强 wget 和 curl 的可用性。它的主要目标是使通过命令行与网络服务器进行交互的过程变得尽可能的人性化。为此,HTTPie 支持具有表现力、但又很简单很直观的语法。它以彩色模式显示响应,并且还有一些不错的优点,比如对 JSON 的良好支持,和持久性会话用以作业流程化。

我知道很多人对把像 wget 和 curl 这样的无处不在的、可用的、完美的工具换成完全没听说过的软件心存疑虑。这种观点是好的,特别是如果你是一个系统管理员、要处理很多不同的硬件的话。然而,对于开发者和终端用户来说,重要的是效率。如果我发现了一个工具的用户更佳替代品,那么我认为采用易于使用的版本来节省宝贵的时间是毫无疑问的。没有必要对替换掉的工具保持信仰忠诚。毕竟,对于 Linux 来说,最好的事情就是可以选择。

在这篇文章中,让我们来了解并展示一下我所说的 HTTPie,一个用户友好的 wget 和 curl 的替代。

在 Linux 上安装 HTTPie

HTTPie 是用 Python 写的,所以你可以在几乎所有地方(Linux,MacOSX,Windows)安装它。而且,在大多数的 Linux 发行版中都有编译好的安装包。

Debian,Ubuntu 或者 Linux Mint:


  1. $ sudo apt-get install httpie

Fedora:


  1. $ sudo yum install httpie

CentOS/RHEL:

首先,启用EPEL 仓库,然后运行:


  1. $ sudo yum install httpie

对于任何 Linux 发行版,另一个安装方法时使用pip


  1. $ sudo pip install --upgrade httpie

HTTPie 的例子

当你安装完 HTTPie 后,你可以通过输入 http 命令来调用它。在这篇文章的剩余部分,我会展示几个有用的 http 命令的例子。

例1:定制头部

你可以使用 <header:value> 的格式来定制头部。例如,我们发送一个 HTTP GET 请求到 www.test.com ,使用定制用户代理(user-agent)和来源(referer),还有定制头部(比如 MyParam)。


  1. $ http www.test.com User-Agent:Xmodulo/1.0 Referer:http://xmodulo.com MyParam:Foo

注意到当使用 HTTP GET 方法时,就无需明确指定 HTTP 方法。

这个 HTTP 请求看起来如下:


  1. GET / HTTP/1.1
  2. Host: www.test.com
  3. Accept: */*
  4. Referer: http://xmodulo.com
  5. Accept-Encoding: gzip, deflate, compress
  6. MyParam: Foo
  7. User-Agent: Xmodulo/1.0

例2:下载文件

你可以把 http 作为文件下载器来使用。你需要像下面一样把输出重定向到文件。


  1. $ http www.test.com/my_file.zip > my_file.zip

或者:


  1. $ http --download www.test.com/my_file.zip

例3:定制 HTTP 方法

除了默认的 GET 方法,你还可以使用其他方法(比如 PUT,POST,HEAD)。例如,发送一个 HTTP PUT 请求:


  1. $ http PUT www.test.com name='Dan Nanni' email=dan@email.com

例4:提交表单

使用 http 命令提交表单很容易,如下:


  1. $ http -f POST www.test.com name='Dan Nanni' comment='Hi there'

'-f' 选项使 http 命令序列化数据字段,并将 'Content-Type' 设置为 "application/x-www-form-urlencoded; charset=utf-8"。

这个 HTTP POST 请求看起来如下:


  1. POST / HTTP/1.1
  2. Host: www.test.com
  3. Content-Length: 31
  4. Content-Type: application/x-www-form-urlencoded; charset=utf-8
  5. Accept-Encoding: gzip, deflate, compress
  6. Accept: */*
  7. User-Agent: HTTPie/0.8.0
  8. name=Dan+Nanni&comment=Hi+there

例5:JSON 支持

HTTPie 内置 JSON(一种日渐普及的数据交换格式)支持。事实上,HTTPie 默认使用的内容类型(content-type)就是 JSON。因此,当你不指定内容类型发送数据字段时,它们会自动序列化为 JSON 对象。


  1. $ http POST www.test.com name='Dan Nanni' comment='Hi there'

这个 HTTP POST 请求看起来如下:


  1. POST / HTTP/1.1
  2. Host: www.test.com
  3. Content-Length: 44
  4. Content-Type: application/json; charset=utf-8
  5. Accept-Encoding: gzip, deflate, compress
  6. Accept: application/json
  7. User-Agent: HTTPie/0.8.0
  8. {"name": "Dan Nanni", "comment": "Hi there"}

例6:输出重定向

HTTPie 的另外一个用户友好特性是输入重定向,你可以使用缓冲数据提供 HTTP 请求内容。例如:


  1. $ http POST api.test.com/db/lookup < my_info.json

或者:


  1. $ echo '{"name": "Dan Nanni"}' | http POST api.test.com/db/lookup

结束语

在这篇文章中,我介绍了 HTTPie,一个 wget 和 curl 的可能替代工具。除了这里展示的几个简单的例子,你可以在其官方网站上找到 HTTPie 的很多有趣的应用。再次重复一遍,一款再强大的工具也取决于你对它的了解程度。从个人而言,我更倾向于 HTTPie,因为我在寻找一种更简洁的测试复杂网络接口的方法。

你怎么看?

原文发布时间:2015-05-21

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-12 03:33:53

用腻了 wget 或 curl,有什么更好的替代品吗?的相关文章

dos利用wget.exe让杀毒软件升级更自动化_DOS/BAT

首先感谢xhj版主为广大用户提供了杀毒软件的光盘.优盘集合,并提供了杀毒软件的升级方法.在使用杀毒软件的升级时,hxj使用windows的命令行方式提供升级,命令如下:IEXPLORE http://...,使用这个命令,需要用户指定下载的位置,很是不爽(这个winrar也一样),有没有其他的方式,只要用户一点击升级全自动呢?其实是可以做到的. wget是linux下的从网络上自动下载文件的自由工具,它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理,目前已经移植到WINDOWS下.它

安装和使用Linux CURL

--获得安装包,从网上直接下载或者其他途径,这里直接wget # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz --解压到当前目录 # tar -zxf curl-7.17.1.tar.gz --进入解压后的目录内 # cd curl-7.17.1 --配置,指定安装的目录,这里是"/usr/local/curl" # ./configure --prefix=/usr/local/curl -- # make --安装 #

服务器不支持curl

windows下开启方法: 1.拷贝PHP目录中的libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll文件到 system32 目录. 2.修改php.ini:配置好 extension_dir ,去掉 extension = php_curl.dll 前面的分号. 3.重起apache或者IIS. 测试是否安装成功: <?php $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,"http:/

支持HTTP2的cURL——基于Alpine的最小化Docker镜像

本文讲的是支持HTTP2的cURL--基于Alpine的最小化Docker镜像[编者的话]本文详细地描述了如何构建一个支持HTTP2的cURL镜像,并且尽可能地降低镜像的体积. cURL是我喜欢的开源软件之一.虽然cURL的强大常常被认为是理所当然的,但我真心地认为它值得感谢和尊重.如果我们的工具箱失去了curl,那些需要和网络重度交互的人(我们大多数人都是这样的)将会陷入到困境中.curl速度快.体积小,并且和大多数好工具一样,简洁干净,尽量不影响用户,只做它们需要做的事情. 如果有人想使用c

Linux命令之curl - 强大的网络传输工具

来源:http://www.cnblogs.com/duhuo/p/5695256.html 参考:http://www.aiezu.com/system/linux/linux_curl_syntax.html 参考:http://www.cnblogs.com/xd502djj/archive/2012/06/12/2546737.html 用途说明 linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,

curl: (2) Failed Initialization报错

curl出现curl: (2) Failed Initialization报错 报错可能是curl出问题了,下载curl包,重新编译curl wget https://curl.haxx.se/download/curl-7.54.0.tar.gz ./configure --disable-shared make make install 编译完成curl命令恢复正常

嵌入式 Linux下编译并使用curl静态库

 #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disable-tftp --disable-telnet --disable-largefile --disable-smtp --disable-imap --without-ssl --without-libssh2 --without-zlib --without-librtmp --withou

CURL的学习和应用(附多线程实现)_php技巧

curl安装: windows下面的安装:修改php.ini文件的设置,找到php_curl.dll//取消下在的注释extension=php_curl.dll linux下面安装: 复制代码 代码如下: # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz# tar zxvf curl-7.17.1.tar.gz  //解压#cd curl-7.17.1# ./configure –prefix=/usr/local/curl# mak

Linux下PHP安装curl扩展支持https例子

问题:   线上运行的lamp服务器,默认yum安装的curl模块只支持http,不支持https.   解决方法:   编译安装curl,重新编译php,使php的curl模块支持https.   具体步骤:   1.下载curl   cd /usr/local/src  #进入安装包存放目录   wget http://curl.haxx.se/download/curl-7.44.0.tar.gz  #下载   2.安装curl   cd /usr/local/src   tar zxvf