1.curlコマンドとは
任意のサーバーやWebサイトへhttpリクエストを送って、そのレスポンスをチェックすることができるコマンド
curlの後に-Xオプションを指定することでデータの送受信を指定することができる。
(-Xオプション無しだとデフォルトでGET(受信)となる。)
2.よく使用するオプション表
オプション | 説明 |
---|---|
-o,-O | 取得したコンテンツをファイル出力する |
-s | コンテンツ取得時の進捗状況を非表示にする |
-x | プロキシサーバ経由でアクセスする |
-X | メソッド(GET,POST等)の指定(メソッド一覧) |
-v | コンテンツを取得した際の詳細なログを表示する |
-I,--head | コンテンツを取得した際のHTTPレスポンスヘッダの内容を表示する |
-L | リダイレクトがあったらリダイレクト先の情報を取る |
-d(--data) | POSTメソッドで使用。送信する文字列データを指定する |
–data-urlencode | 日本語文字列などをエンコードして送信する必要がある場合 |
-H | リクエストヘッダを追加する。POSTのフォーマットがJSONの場合は -H "Content-Type: application/json" という指定をする |
3.具体的な使い方(疎通確認)
curl -v [接続先IPアドレス]:[接続先ポート番号]
このコマンドは「コマンドを実行したサーバから、接続先サーバの指定したポートに向けて接続を試みている。
→接続成功の場合の結果
*About to conenct() to [接続先IPアドレス] port [接続先ポート番号](#0)
* Trying [接続先IPアドレス]...
* Connected to [接続先IPアドレス] port [接続先ポート番号](#0)
→ 接続先サーバの接続先ポート番号が空いているということがわかる。
→接続失敗の場合の結果
*About to conenct() to [接続先IPアドレス] port [接続先ポート番号](#0)
* Trying [接続先IPアドレス]...
* couldn't connect to host *Closing connection #0 curl:(7) could'nt connect to host
とか
*About to conenct() to [接続先IPアドレス] port [接続先ポート番号](#0)
* Trying [接続先IPアドレス]...
* couldn't connect to host *Closing connection #0 curl:(7) Failed to connect to [接続先IPアドレス] port [接続先ポート番号]:接続を拒否されました
等の表示がされる。
→この場合、接続先サーバの接続先ポートが空いていない可能性がある。
4. 3のコマンドを使用して実際あったこと
①Aサーバで以下のコマンドを実行し、失敗
curl -v BサーバのIPアドレス:9100
*About to conenct() to BサーバのIPアドレス port 9100(#0)
* Trying BサーバのIPアドレス...
* couldn't connect to host *Closing connection #0 curl:(7) Failed to connect to BサーバのIPアドレス port 9100:接続を拒否されました
→Bサーバの9100ポートが空いていないことがわかる
②Bサーバで同様のコマンドを実行し、成功
curl -v AサーバのIPアドレス:9100
*About to conenct() to AサーバのIPアドレス port 9100(#0)
* Trying AサーバのIPアドレス...
* Connected to AサーバのIPアドレス port 9100(#0)
→Aサーバの9100ポートが空いていることがわかる。
③Bサーバから自分自身の同様ポートを指定しコマンドを実行すると、失敗
curl -v localhost:9100
*About to conenct() to BサーバのIPアドレス port 9100(#0)
* Trying BサーバのIPアドレス...
* couldn't connect to host *Closing connection #0 curl:(7) Failed to connect to BサーバのIPアドレス port 9100:接続を拒否されました
→Bサーバの9100ポートが空いていないことがわかる
ここで成功していた場合、A-Bサーバ間のfirewallではじかれている可能性がある。
双方のサーバで通信の疎通を確認したい場合、それぞれのサーバで接続したい先の疎通を試みた後に、自分自身のサーバでも通信を確認した方が切り分けができる。