どーもー、某ベンチャー系のIT企業に勤めてる私ですが、今回業務上curlコマンドを利用する事があったので、せっかくなので当記事にまとめておく事にしました。
curlコマンドとは・・・任意のサーバーやWebサイトへhttpリクエストを送って、そのレスポンスをチェックすることができるコマンドになります。
(上記は、Googleへcurlコマンド(httpのget)を実行した時の結果です。ちゃんとGoogleからHTMLソースが返ってきてる事が分かりますね)
業務で、Linuxを利用する方や、インフラ・ネットワーク担当者なら、知っていて当然のコマンドですね。
また、http以外にも、メールやFTP、TELNETなど多くのプロトコルに対応しているようです。
一般的には、APIの疎通確認によく使われるコマンド・・・って認識の方がほとんどではないでしょうか。
というわけで今回は、curlコマンドの基本的な使い方:HTTPリクエストのGET、POST、REST(json形式)メソッドの疎通を確認する手順。
また、curlコマンドをwindowsで利用する時の手順について確認しています。
以下、目次。
- curlコマンドの基本。GET、POST、REST(json)や、よく利用するオプション
- オレオレ証明書(自己SSL証明書)のサーバーへ疎通確認する手順
- 日本語の文字化け対策
- windowsでcurlコマンド利用する場合。ダウンロード・インストールの手順
curlコマンドの基本的な使い方 GET、POST、REST(json)や、よく利用するオプションまとめ
以下、curlコマンドにてよくチェックするHTTPリエクストの3メソッドになります。
- GET
- POST
- REST(json形式)
これらと共に、よく利用するオプションについても順にまとめていきます。
1、GETメソッド -I、-vオプション
-
「オプション無し(GETメソッド)」
以下、コマンド例。
$ curl https://www.google.co.jp/上記は、googleに対してGetメソッドリクエストを送っています。すると以下のように、HTMLレスポンスを返してくれます。
-
「-Iオプション:レスポンスのHTTPヘッダーの確認」
以下、コマンド例。
$ curl https://www.google.co.jp/ -Iこちらは、以下のようにHTTPレスポンスヘッダーの情報を返してくれます(ボディの情報はなし)
(ちなみに-Iオプションは、Getに限らず他のメソッドでも使えます)
-
「-vオプション:リクエスト&レスポンスのHTTPヘッダー確認や、接続先サーバーのSSL証明書の情報など」
以下、コマンド例。
$ curl https://www.google.co.jp/ -v-vオプションは、様々な情報を確認することができます(以下参考)
(ちなみに-vオプションは、Getに限らず他のメソッドでも使えます)
以上、Getメソッドの確認手順(コマンド)でした。
2、POSTメソッド -XPOST、-H、–dataオプション
-
「-XPOSTオプション:POSTメソッドの指定」
POSTメソッドの確認をしたい場合は、-XPOSTオプションを記載することでOK!です。
以下、コマンド例。
$ curl -XPOST https://www.google.co.jp/ちなみに、上記をcurl実行すると、googleではPostメソッドでの通信は許可されていないようで、405エラーのレスポンスが返ってきていますね。
-
「-Hオプション:リクエストのHTTPヘッダーの設定」
以下、コマンド例。
$ curl -XPOST https://aaa.com/index.php -H “Content-Type: application/json” -H “cookie:JSESSIONID=aaa”パラメーターとして、HTTPヘッダーの設定をしてPOST送信するときの例です(上記は、2つの設定をしています)
-
「–dataオプション:リクエストのHTTPボディの設定」
続いて、HTTPボディの設定もする例です。
$ curl -XPOST https://aaa.com/index.php -H “Content-Type: application/x-www-form-urlencoded” –data “host=aaa.ne.jp&user=admin&password=passadmin”※「content-type = application/x-www-form-urlencoded」の場合、「–data オプション」でリクエストボディを設定します。
上記は、フォーム画面の入力値をパラメーター設定値として、Postメソッドでリクエストしている例になります。
ちなみに、レスポンスボディ情報が無く、実行後に何も表示されない場合もけっっこうあるので、-vオプションを付けると良いでしょう(ヘッダー内容等を確認できる)
以上、Postメソッドの確認手順(コマンド)でした。
3、REST(json形式)メソッド -dオプション
続いて、API通信に一般的に使われているRESTリクエストで、json形式のデータを送る場合。以下コマンド例
※-H “x-authkey:aaa” : 個人的に任意に設定したヘッダーになります(無くても良い)
※-d “{“companyId”:”abc”,”memberId”:111,”plan”:5}” だとエラーになります。オブジェクト内の「”」については、「\」を付けてエスケープ(文字列化)してやる必要があります。
※「Content-Type:application/json」で、-d を -data にすると、エラーになります。。。
上記のように、RESTリクエストは、内部的にはPOSTリクエストと変わりないので、「-XPOST」オプションを設定してやります。
また、json形式は「Content-Type:application/json」で指定し、データは-dオプションで指定してやります。
実際に、APIの設定がされているURLに、RESTリクエストを送ってやると、ちゃんとjsonデータがレスポンスされる事が確認できます(以下例)
以上、REST(json形式)メソッドについてでした。
・
・
・
というわけで、Get、Post、RestとCurlコマンドを試してきましたが、個人的に気になった注意点について、一応以下にまとめておきます。
-
「’」だとエラーになる・・・例:「-H ‘Content-Type:application/json’」
-
「順番は関係ない。(エラーにならない)」
以下であれば、 -XPOST https://aaa.co.jp/admin を一番最後に持ってきても問題はない。
curl -XPOST https://aaa.co.jp/admin –data “host=aaa.ne.jp&user=admin&password=passadmin” -
「オプションの、-dと-dataは違う扱い・・・上記「REST通信の確認」でエラーとなったため」
以上です。
curlコマンドで、オレオレ証明書(自己SSL証明書)のサーバーへ疎通確認する手順
curlコマンドにて、オレオレSSL証明書のサーバーへリクエストを送ると、上記のようにエラーで返ってきます。
ですが、-kオプションを利用することで、オレオレSSL証明書のURLでも、ちゃんと実行することができます(以下例)
日本語の文字化け対策。curlコマンドで日本語に対応する手順
これは、Curlというか、コンソール(コマンドプロンプト等)の問題なんですけど、
レスポンス内容が日本語で文字化けしている事が多々あります。そういう場合は、以下の手順で対応できます。
-
以下のコマンドで、文字コードを「UTF-8」に変更する。
chcp 65001 -
フォントを日本語対応しているものに変更する。
※UTF-8に変更しても文字化けが起こる場合は・・・日本語表示が可能なフォントを選択する必要があります。
手順:コマンドプロンプト(アイコン)で右クリック→プロパティ>フォント>フォントで「MSゴシック」を選択。
以上です。
windowsでcurlコマンド利用する場合。ダウンロード・インストールの手順
curlコマンドの利用シーンって、基本的にLinuxが多いと思いますが、ここではWindowsで利用できるようにする手順をまとめていきます。
まず、Windowsでは標準で入ってないので、以下からダウンロードしてください。
(以下参考)
ダウンロードしたzipファイルは解凍して、解答したフォルダを、「C:\Program Files (x86)\」以下に移動してください(場所は任意の場所で良いが)
続いて、配置したフォルダ内の「curl.exe」があるディレクトリパスを確認します。
パスが確認できたら、そのパスをユーザー環境変数の「Path」に追記してください。
※補足:ユーザー環境変数とシステム環境変数の違いについて
環境変数(Path)の設定は、上記のように2つの指定がありますが、
違いは読み込みの順番で、システム環境変数が読み込まれた後にユーザー環境変数が読み込まれる流れになります。
(仮に、同名のコマンドがあった場合に、意図しない動作原因となってしまうので注意してください)
あとは、システム環境変数の場合は、全ユーザー反映となりますが、ユーザー環境変数は該当ユーザーのみとなります。
(Administrator以外は、システム環境変数を設定できません)
で、環境変数の設定が終わったら、コマンドプロンプト(cmd)にてコマンド実行してみましょう(cmdは一度再起動してください)
上記のように実行されたら、Windowsでもcurlコマンドが使えるようになります。
以上です。