命令行基础:网络请求
从命令行发出网络请求有多种形式和大小。 有些人发誓 curl 其他人喜欢 wget。 对我来说,我喜欢 lwp-request 包,它提供了熟悉的 GET、POST 和 HEAD 命令。 列表的第三个,HEAD,是我经常用来解决服务器返回的标头的问题。
入门
如果您想在浏览器中使用终端来学习本教程,请单击下面的 Launch an Interactive Terminal! 按钮。 您将能够直接从浏览器运行每个命令。
启动交互式终端!
我们将要使用的命令由一个名为 lwp-request 的包提供。
有问题的软件包是用 Perl 编写的,并且往往是许多 Linux 发行版以及其他类 Unix 操作系统(如 macOS)的标准配置。
lwp-request 命令可以使用一系列参数直接调用,但为了简单起见,我们将介绍它附带的帮助脚本。
如果您的系统缺少 GET、POST 和 HEAD,您很可能可以从您最喜欢的包管理器中安装 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 位。
与 GET 和 POST 类似,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
奖金
单色输出让你失望? 如果是这样,您可以将 HTTPie 的 http 命令别名为 GET、POST 和 HEAD。
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 和类似工具留在门口。
您也可以完全省略浏览器!