命令行基础:网络请求

来自菜鸟教程
跳转至:导航、​搜索

从命令行发出网络请求有多种形式和大小。 有些人发誓 curl 其他人喜欢 wget。 对我来说,我喜欢 lwp-request 包,它提供了熟悉的 GETPOSTHEAD 命令。 列表的第三个,HEAD,是我经常用来解决服务器返回的标头的问题。

入门

如果您想在浏览器中使用终端来学习本教程,请单击下面的 Launch an Interactive Terminal! 按钮。 您将能够直接从浏览器运行每个命令。

启动交互式终端!

我们将要使用的命令由一个名为 lwp-request 的包提供。

有问题的软件包是用 Perl 编写的,并且往往是许多 Linux 发行版以及其他类 Unix 操作系统(如 macOS)的标准配置。

lwp-request 命令可以使用一系列参数直接调用,但为了简单起见,我们将介绍它附带的帮助脚本。

如果您的系统缺少 GETPOSTHEAD,您很可能可以从您最喜欢的包管理器中安装 lwp-request 包。

在 Ubuntu 和 Debian 派生系统上,您可以使用以下命令安装它:

sudo apt update
sudo apt install libwww-perl

在 CentOS、Rocky Linux、Fedora 和其他 RedHat 派生系统上,您可以使用以下命令安装它并支持 HTTPS URL:

sudo dnf install perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch 

GET

假设您非常喜欢 Alligator.io 徽标,您想在本地下载它。 这是一个非常了不起的标志,谁不想拥有自己的个人副本?

GET 文件,您可以简单地运行:

GET https://alligator.io/images/logo-fancy.svg

没那么快! 所做的只是显示一堆 SVG 标记。

在真正的 Unix 哲学时尚中,GET 命令做了一件非常好的事情,那就是 GET 处理文件。

当您想检查 URL 以查看 Web 服务器返回的内容时,这非常有用,但如果您想真正下载那个可爱的徽标,您需要将输出发送到文件:

GET https://alligator.io/images/logo-fancy.svg > logo-fancy.svg

现在,我们已经将出色的 Alligator.io 徽标下载到本地文件!

POST

GET 命令允许我们使用来自远程服务器的文件,而 POST 允许我们将数据发送到服务器进行处理以及返回它的输出。

至少,POST 的语法与 GET 相同:

POST https://httpbin.org/post

这将提示您输入您想要 POST 的内容。 预期的字符串应采用如下所示的查询字符串格式:

reptile=alligator&color=#008f68

输入完内容后,只需点击 CTRL-D,内容就会被 POST 编辑。 我们发布到的服务将反映请求:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "color": "#008f68\n",
    "reptile": "alligator"
  },
  "headers": {
    "Content-Length": "32",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "lwp-request/6.39 libwww-perl/6.39"
  },
  "json": null,
  "origin": "203.0.113.5",
  "url": "https://httpbin.org/post"
}

HEAD

如前所述,HEAD 不仅对调试和故障排除非常有用,而且我很确定它在我最喜欢的命令行实用程序中排名前 5 位。

GETPOST 类似,HEAD 的语法非常简单:

HEAD http://alligator.io/

这将返回一个 200 OK 和有关 Web 服务返回的标头的信息。

不幸的是,这并不完全正确,因为我们通过 HTTPS 提供 Alligator.io,就像我们是具有安全意识的爬虫类网络用户一样。

默认情况下,HEAD 命令只为您提供有关请求链中最后一站的信息。 要查看所有请求,包括自动 301 Moved Permanently,请传入 -S 参数:

HEAD -S http://alligator.io/

这给了我们更多的洞察力:

OutputHEAD http://alligator.io/
301 Moved Permanently
HEAD https://alligator.io/
200 OK
Cache-Control: public, max-age=0, must-revalidate
Connection: close
Date: Sat, 29 Jun 2019 00:49:18 GMT
Age: 1
ETag: "8b85849c835909679fc1ba80b307d144-ssl"
Server: Netlify
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Client-Date: Sat, 29 Jun 2019 00:49:18 GMT
Client-Peer: 203.0.113.1:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Client-SSL-Cert-Subject: /CN=alligator.io
Client-SSL-Cipher: TLS_AES_256_GCM_SHA384
Client-SSL-Socket-Class: IO::Socket::SSL
Strict-Transport-Security: max-age=31536000
X-NF-Request-ID: 60babe56-c0ea-4658-aa5a-3e185f1e851f-10342

奖金

单色输出让你失望? 如果是这样,您可以将 HTTPiehttp 命令别名为 GETPOSTHEAD

HTTPie 可以完成 lwp-request 库所做的所有事情,语法相似,并具有彩色输出的额外好处。

在 Ubuntu 和 Debian 派生系统上,您可以使用以下命令安装 HTTPie:

sudo apt update
sudo apt install httpie

在 Centos、Rocky Linux、Fedora 和 RedHat 派生的发行版上,只要您有 EPEL,就可以使用以下命令安装 HTTPie:

sudo dnf install epel-release
sudo dnf install httpie

我的本地别名如下所示:

# HTTPie aliases
alias GET='http'
alias POST='http POST'
alias HEAD='http HEAD'

结论

下次您需要向 API 发出网络请求或对服务器返回的标头进行故障排除时,您可以将 Postman 和类似工具留在门口。

您也可以完全省略浏览器!