コマンドラインの基本:ネットワークリクエスト
コマンドラインからネットワーク要求を行うには、さまざまな形とサイズがあります。 curl
を誓う人もいればwget
を愛する人もいます。 私にとっては、おなじみの名前のGET
、POST
、HEAD
コマンドを提供するlwp-request
パッケージが大好きです。 リストの3番目のHEAD
は、サーバーから返されるヘッダーのトラブルシューティングに頻繁に使用するものです。
入門
ブラウザの端末を使用してこのチュートリアルを続行する場合は、下のLaunch an Interactive Terminal!
ボタンをクリックしてください。 各コマンドはブラウザから直接実行できます。
インタラクティブターミナルを起動します!
これから使用するコマンドは、lwp-request
というパッケージによって提供されます。
問題のパッケージはPerlで書かれており、かなりの数のLinuxディストリビューションや、macOSのような他のUnixライクなオペレーティングシステムに標準で付属する傾向があります。
lwp-request
コマンドは、一連の引数を使用して直接呼び出すことができますが、簡単にするために、付属のヘルパースクリプトについて説明します。
システムにGET
、POST
、HEAD
がない場合は、お気に入りのパッケージマネージャーからlwp-request
パッケージをインストールできる可能性があります。
UbuntuおよびDebian派生システムでは、次のコマンドを使用してインストールできます。
sudo apt update sudo apt install libwww-perl
CentOS、Rocky Linux、Fedora、およびその他のRedHat派生システムでは、次のコマンドを使用して、HTTPSURLをサポートするようにインストールできます。
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
コマンドは1つのことを非常にうまく実行し、それはファイルを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サービスによって返されるヘッダーに関する情報が返されます。
残念ながら、これは完全には正しくありません。セキュリティを重視する優れた爬虫類の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や同様のツールをドアに置いておくことができます。
ブラウザを完全に省略することもできます!