コマンドラインの基本:ネットワークリクエスト

提供:Dev Guides
移動先:案内検索

コマンドラインからネットワーク要求を行うには、さまざまな形とサイズがあります。 curlを誓う人もいればwgetを愛する人もいます。 私にとっては、おなじみの名前のGETPOSTHEADコマンドを提供するlwp-requestパッケージが大好きです。 リストの3番目のHEADは、サーバーから返されるヘッダーのトラブルシューティングに頻繁に使用するものです。

入門

ブラウザの端末を使用してこのチュートリアルを続行する場合は、下のLaunch an Interactive Terminal!ボタンをクリックしてください。 各コマンドはブラウザから直接実行できます。

インタラクティブターミナルを起動します!

これから使用するコマンドは、lwp-requestというパッケージによって提供されます。

問題のパッケージはPerlで書かれており、かなりの数のLinuxディストリビューションや、macOSのような他のUnixライクなオペレーティングシステムに標準で付属する傾向があります。

lwp-requestコマンドは、一連の引数を使用して直接呼び出すことができますが、簡単にするために、付属のヘルパースクリプトについて説明します。

システムにGETPOSTHEADがない場合は、お気に入りのパッケージマネージャーから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

ボーナス

単色出力はあなたを失望させましたか? その場合、 HTTPiehttpコマンドをGETPOST、および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や同様のツールをドアに置いておくことができます。

ブラウザを完全に省略することもできます!