命令行基础:网络请求
从命令行发出网络请求有多种形式和大小。 有些人发誓 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 和类似工具留在门口。
您也可以完全省略浏览器!