标签 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:

$ sudo apt-get install httpie

Fedora:

$ sudo yum install httpie

CentOS/RHEL:

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

$ sudo yum install httpie

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

$ sudo pip install --upgrade httpie

HTTPie 的例子

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

例1:定制头部

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

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

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

这个 HTTP 请求看起来如下:

GET / HTTP/1.1
Host: www.test.com
Accept: */*
Referer: http://xmodulo.com
Accept-Encoding: gzip, deflate, compress
MyParam: Foo
User-Agent: Xmodulo/1.0

例2:下载文件

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

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

或者:

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

例3:定制 HTTP 方法

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

$ http PUT www.test.com name='Dan Nanni' [email protected]

例4:提交表单

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

$ 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 请求看起来如下:

POST / HTTP/1.1
Host: www.test.com
Content-Length: 31
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: HTTPie/0.8.0

name=Dan+Nanni&comment=Hi+there

例5:JSON 支持

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

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

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

POST / HTTP/1.1
Host: www.test.com
Content-Length: 44
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, compress
Accept: application/json
User-Agent: HTTPie/0.8.0

{"name": "Dan Nanni", "comment": "Hi there"}

例6:输出重定向

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

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

或者:

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

结束语

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

你怎么看?


via: http://xmodulo.com/wget-curl-alternative-linux.html

作者:Dan Nanni 译者:wangjiezhe 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我正尝试使用curl命令获取一个URL,但除此之外我还想在传出的HTTP请求中设置一些自定义的头部字段。我如何能够在curl中使用自定义的HTTP头呢?

curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/POP3S, SCP, IMAP/IMAPS协议等。当你使用curl向一个URL发送HTTP请求的时候,它会使用一个默认只包含必要的头部字段(如:User-Agent, Host, and Accept)的HTTP头。

在一些个例中,或许你想要在一个HTTP请求中覆盖掉默认的HTTP头或者添加一个新的自定义头部字段。例如,你或许想要重写“HOST”字段来测试一个负载均衡,或者通过重写"User-Agent"字符串来假冒特定浏览器以解决一些访问限制的问题。

为了解决所有这些问题,curl提供了一个简单的方法来完全控制传出HTTP请求的HTTP头。你需要的这个参数是“-H” 或者 “--header”。

为了定义多个HTTP头部字段,"-H"选项可以在curl命令中被多次指定。

例如:以下命令设置了3个HTTP头部字段。也就是说,重写了“HOST”字段,并且添加了两个字段("Accept-Language" 和 "Cookie")

$ curl -H 'Host: 157.166.226.25' -H 'Accept-Language: es' -H 'Cookie: ID=1234' http://cnn.com

对于"User-Agent", "Cookie", "Host"这类标准的HTTP头部字段,通常会有另外一种设置方法。curl命令提供了特定的选项来对这些头部字段进行设置:

  • -A (or --user-agent): 设置 "User-Agent" 字段.
  • -b (or --cookie): 设置 "Cookie" 字段.
  • -e (or --referer): 设置 "Referer" 字段.

例如,以下两个命令是等效的。这两个命令同样都对HTTP头的"User-Agent"字符串进行了更改。

$ curl -H "User-Agent: my browser" http://cnn.com
$ curl -A "my browser" http://cnn.com

wget是另外一个类似于curl,可以用来获取URL的命令行工具。并且wget也一样允许你使用一个自定义的HTTP头。点击这里查看wget命令的详细信息。


via: http://ask.xmodulo.com/custom-http-header-curl.html

译者:Ping 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

提问: 当我用wget获取一个重定向到URL Y的URL X的时候,wget默认会自动获取URL Y。然而我想要强制获取不带重定向的URL X。我该如何禁用wget重定向URL的功能。

在HTTP标准中,重定向响应(带3XX的HTTP响应)说明请求的URL被移到了新的位置。重定向相应接着包含了目标重定向的URL。

像常规的HTTP客户端,wget支持URL重定向(也叫URL转发),意味着当你尝试下载一个重定向的URL时,wget会自动跟随URL重定向获取重定向后的资源。如果你由于一些原因想要禁用URL重定向,并停止3XX的状态码,你可以使用wget的“--max-redirect=number”选项。这个选项用来指定最大(递归)重定向的数字,默认是20。

如果你想要禁用wget中的HTTP重定向,使用“--max-redirect=0”

$ wget --max-redirect=0 http://www.aaa.com/a.html

--2014-10-31 23:08:58--  http://www.aaa.com/a.html
Resolving aaa.com (aaa.com)... 1.2.3.4
Connecting to aaa.com (aaa.com)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.bbb.com/b.html [following]
0 redirections exceeded.

如你所见,当wget遇到HTTP重定向响应时,它不会跟着重定向,并以“0 redirections exceeded”(超出0次重定向)的错误信息停止。它同样会显示一个HTTP的状态码(比如301)。

注意一下curl,另外一个类似的HTTP客户端,行为正好相反。默认上,curl并不会跟随URL重定向。要强制使cutl重定向到一个URL,你要使用“-L”选项。


via: http://ask.xmodulo.com/disable-http-redirect-wget.html

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux 命令行工具很牛逼,Linux 命令行以及一些第三方应用让 Linux 变得更牛逼。Linux 命令行工具可以用于下载种子和文件,可以上网冲浪。

5 Command Line Internet Tools

本文推荐的5个强悍的上网工具方便实用,是居家旅行的必备物品。

1. rTorrent

rTorrent 基于文本的 Torrent 客户端,用 C++ 调制而成,我们的目标是高性能!我们可运行在标准的 Linux 发行版中,包括 FreeBSD 和 Mac OS X。

安装 rTorrent

# apt-get install rtorrent    (基于 APT 的系统,如 Debian,Ubuntu)
# yum install rtorrent        (基于 YUM 的系统,如 RHEL,Fedora)

检查有没有安装成功,运行下面命令试试:

# rtorrent

rTorrent Command Line Tool

rTorrent 的用法

下面是 rTorrent 比较常用的功能:

  • CTRL+ q – 退出 rTorrent。
  • CTRL+ s – 开始下载。
  • CTRL+ d – 暂停下载任务,或删除己被暂停的下载任务。
  • CTRL+ k – 关闭一个正在下载的任务
  • CTRL+ r – 在开始上传、下载之前,使用 Hash 检查文件,确保文件的完整性。
  • CTRL+ q – 按再次这个组合键,rTorrent 无条件退出。
  • Left Arrow Key – 回退到上个页面。
  • Right Arrow Key – 前进到下个页面。

2. Wget

Wget 是一个 GNU 项目,它的名称参考了 World Wide Web (WWW)。Wget 在递归下载方面做得很好,你可以将整个网站的内容都下到本地,然后访问本地的 HTML 文件。它支持多种操作系统:Windows,Mac,Linux。它支持多种协议,可通过 HTTP,HTTPS 和 FTP 下载文件。它可以对整个网站做一个镜像(完全将目标网站的文件下载到本机),支持代理,支持断点传输(即下载可暂停)。

安装 Wget

Wget 也是一个 GNU 项目,在标准 Linux 发行版中都有内置,就是说你不用下载安装它就可以使用了。万一,它没有被默认安装,你也可以通过 APTYUM 安装。

# apt-get install wget    (基于 APT 的系统,如 Debian,Ubuntu)
# yum install wget        (基于 YUM 的系统,如 RHEL,Fedora)

Wget 的用法

下载一个文件:

# wget http://www.website-name.com/file

下载整个网站:

# wget -r http://www.website-name.com

下载指定类型的文件(比如 PDF 和 PNG):

# wget -r -A png,pdf http://www.website-name.com

下面是一张 Wget 的截图,我们正在把 Yahoo.com 网站整个都镜像下来。

Wget Command Line File Download

关于 wget 的更多用法,参考Wget 的10个的用法

3. cURL

cURL 是一个客户端工具,支持多种文件传输协议,比如 FTP, HTTP, FTPS, TFTP, TELNET, IMAP, POP3 等等。不像 wget 等工具,cURL 只是一个单纯的下载器,支持 LDAP, POP3,支持代理下载,支持断点续传。

安装 cURL

大多数发行版都默认安装了 cURL,如果没有,可通过 aptyum 下载:

# apt-get install curl    (基于 APT 的系统,如 Debian,Ubuntu)
# yum install curl        (基于 YUM 的系统,如 RHEL,Fedora)

cURL 基本用法

# curl www.tecmint.com

Curl Data Download

Curl Download

4. w3m

W3m 是基于文本的网页浏览器,使用 GPL 协议,支持 tables, frames, color, SSL 连接,支持内嵌图片,以快速闻名。

安装 w3m

W3m 也是大多数发行版的默认配置,也可通过 aptyum 安装。

# apt-get install w3m    (基于 APT 的系统,如 Debian,Ubuntu)
# yum install w3m        (基于 YUM 的系统,如 RHEL,Fedora)

w3m 的基本用法

# w3m www.tecmint.com

w3m Text Based Web Browser

5. Elinks

Elinks 是一个免费的基于本文的网页浏览器,支持 HTTP,支持 HTTP Cookie,支持 PerlRuby 写的脚本,支持网页标签,支持鼠标,可彩色显示页面,支持 HTTP, FTP,SMB,IPv4,IPv6

安装 Elinks

大多数发行版已经默认安装了 Elinks,如果没有,通过 aptyum 安装。

# apt-get install elinks    (基于 APT 的系统,如 Debian,Ubuntu)
# yum install elinks        (基于 YUM 的系统,如 RHEL,Fedora)

Elinks的基本用法

elinks www.tecmint.com

Elinks Command Line Web Browsing


via: http://www.tecmint.com/command-line-tools-for-downloading-file-and-browsing-websites/

译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出