技術雑食系車好きの備忘録

今やってるもの:python・サーバ構築・blender

<サイト死活監視>curlコマンドでWebサイトの死活チェックをしてみる

はじめに

ネットで調べ物をしていると、応答が無いWebサイトに行きつきました。

 

自宅環境かサイト側、どちらの問題か気になったので、サイトの死活確認方法を調べてみると「curl」というコマンドがWindowsに標準装備されているとの事。

ということで、curlコマンドで色々試したので結果をまとめてみました。

 

curlの気軽さ

仕事でWebアプリケーションの開発に携わっていると、忘れた頃に繋がらない状況が発生して頭を抱える事があります。

そんな時に、一次調査としてcurlコマンドのお手軽さは重宝すると思います。

制限が緩い自宅環境なら監視ツールや監視用サイトに突っ込めば解析できますが、テスト環境や制限がきつい客先環境なんかだとcurlの手軽さが活きそうです。

 

curl実験で使うもの

>今回使用するcurlのバージョン

C:\Users\USER>curl --version
curl 7.83.1 (Windows) libcurl/7.83.1 Schannel
Release-Date: 2022-05-13
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

 

>アクセス不可なサイト(2022/08/07時点 ※2022/08/08復旧されました)

https://pricia.co.jp

※ブラウザアクセス時の画面

>アクセス可能なサイト(対比用、2022/08/07時点)

https://www.yorontou.info

 

curlの基本的な使い方

curl <オプション> <確認対象のURL>

 

オプション無し

応答が無い場合はTime outのエラーメッセージ、レスがある場合はHTTPレスポンスBodyが表示されました。

タイムアウトしているという事は、Webサイト側の問題のようです。(サーバが落ちてる?)

>対アクセス不可サイト

C:\Users\USER>curl https://pricia.co.jp
curl: (28) Failed to connect to pricia.co.jp port 443 after 21062 ms: Timed out

 

>対アクセス可能サイト

C:\Users\USER>curl https://www.yorontou.info
<!DOCTYPE html>
<html lang="ja" itemscope itemtype="http://schema.org/Webpage">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
...以下省略...

 

他にも色々試してみます

ちなみにアクセス不可サイトはどんなオプションを指定しても同様のメッセージだったので、以降は基本アクセス可能なサイトを使用します

 

HTTPヘッダを取得

-I

もしくは

-i

をオプションに指定します

(-I はヘッダのみ、-iはヘッダ + Bodyを表示)

> -I を指定した場合

C:\Users\USER>curl -I https://www.yorontou.info
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 07 Aug 2022 16:49:07 GMT
Content-Type: text/html
Content-Length: 36470
Connection: keep-alive
Vary: Accept-Encoding
Last-Modified: Thu, 04 Aug 2022 08:32:58 GMT
Cache-Control: max-age=86400, public
Expires: Sun, 07 Aug 2022 16:47:07 GMT
Vary: Accept-Encoding
Accept-Ranges: bytes

 

>-i を指定した場合

C:\Users\USER>curl -i https://www.yorontou.info
HTTP/1.1 200 OK
Server: nginx
...ヘッダ情報...
<!DOCTYPE html>
<html lang="ja" itemscope itemtype="http://schema.org/Webpage">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
...Body情報...

 

レスポンス以外の情報を非表示にする

FTPなどデータ転送する場合は、処理状況も表示するようで、処理状況などのレスポンス以外の情報を非表示にできます。

そのためには、-s をオプションに設定します。

curl -s https://www.yorontou.info

※使用URLはファイル転送が無いので、結果はオプション無し実行と同じ表示

 

但し、-s の場合Time outなどエラー情報も表示されなくなります。

仮にエラーを表示したい場合は、大文字の -S もオプションに設定します。

curl -sS https://www.yorontou.info

※s と S は順不同

 

リクエストヘッダの指定

-H オプションを使用して、ヘッダ情報を入力する。
例(Content-Typeを指定):

curl -H "Content-Type: application/json" https://www.yorontou.info

 

なんでも屋の -w

-w オプションは、後ろに形式を指定する事で、実行結果の表示末尾に様々な形式での表示を追加する事ができます。

形式は、 -w "%{指定形式}" です

>HTTPステータスを表示

"%{http_code}" を使用します

C:\Users\USER>curl -w "%{http_code}" https://www.yorontou.info
<!DOCTYPE html>
<html lang="ja" itemscope itemtype="http://schema.org/Webpage">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
.....(Body情報).....</ br> 200

 

※もはやステータスだけで充分、という場合はこちら

C:\Users\USER>curl -s -I -o nul -w "%{http_code}" https://www.yorontou.info
200

 

>処理全体に要した時間を表示する

"%{time_total}" を使用します

C:\Users\USER>curl -s -I -o nul -w "%{time_total}" https://www.yorontou.info
0.113231

 

最後に

今回試してみたcurlコマンド、冒頭に述べたように手軽にちょっと調べてみるというノリだと有用だと思います。

ただし、ヘッダやPOSTメソッドで何か情報を独自に乗せたり、ログイン情報を乗せたりする場合は工夫が必要そうなので、そういう場合は時間をかけてツールとか使う方が吉かと思います。

(いずれもcurlで出来ない事は無いですが、工夫やコマンド作成が大変そう)