curl は URL 指定でデータを受信(もしくは送信)するためのコマンドラインツールです。
Linux ではよく利用されるコマンドのひとつで、最近になって Windows 10 でも標準で組み込まれるようになったので、最新版の Windows 10 であればコマンドプロンプトに「curl」と打ち込むことで利用できます。
- curl
https://curl.se/
curl でアクセスすることでコマンドライン上に情報が綺麗に表示されるよう最適化されているサイトがいくつかあるのは知っていたのですが、それらをまとめたサイトがあったので、実際に表示させてみて面白かったものをピックアップしてみました。
なお、以下の画像はすべて「Windows Terminal」のコマンドプロンプト上で curl を実行した結果を貼り付けたものです。*1
- curl で綺麗に情報が表示されるサイト
- その他(実用的なもの/見た目が派手ではないもの)
- 参考文献
- 付録:"curl -F-=\<-" について
- 付録:curl という名称と読み方について
- 更新履歴
curl で綺麗に情報が表示されるサイト
天気予報
有名どころで割と広く知られているように思います。
- GitHub - chubin/wttr.in: The right way to check the weather
https://github.com/chubin/wttr.in
# 標準的な使い方(IP アドレスの地域判定を元に天気予報を返してくれる) curl wttr.in # 場所を指定する curl wttr.in/paris # 表示言語を日本語に指定する curl -H "Accept-Language: ja" wttr.in # 月齢を表示する curl wttr.in/moon@2021-12-25 # ヘルプの表示 curl wttr.in/:help
QRコード生成
- GitHub - chubin/qrenco.de: QRenco.de a string using curl
https://github.com/chubin/qrenco.de
# QRコードにしたいテキストを直接渡す方法 curl qrenco.de/May_The_Force_Be_With_You # 改行を含む場合の方法 printf "Good luck.\nMay The Force Be With You." | curl -F-=\<- qrenco.de
なお、上記の curl の引数が不思議な形(-F-=\<-
)をしていて面白かったので調べて付録にまとめています。
Linux チートシート
- GitHub - chubin/cheat.sh: the only cheat sheet you need
https://github.com/chubin/cheat.sh
# 概要の表示 curl cheat.sh # ヘルプの表示 curl cheat.sh/:help
暗号通貨の相場表示
- GitHub - chubin/rate.sx: curl cryptocurrencies exchange rates
https://github.com/chubin/rate.sx
# 市場規模の大きい暗号通貨の相場情報一覧 curl rate.sx # ビットコイン(BTC)の相場チャート curl rate.sx/btc # 1ビットコイン -> 日本円 curl jpy.rate.sx/1btc
株価チャート
- GitHub - ericm/stonks: Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal. See how fast your stonks will crash.
https://github.com/ericm/stonks
# 銘柄を指定して使う curl stonks.icu/msft # 複数の銘柄の場合はスラッシュで区切る curl stonks.icu/GOOGL/AAPL/FB/AMZN/MSFT
ニュース記事
- GitHub - omgimanerd/getnews.tech: A web server that fetches data from the News API and formats it for display in the terminal.
https://github.com/omgimanerd/getnews.tech
# 「Cyber attack」についての記事 curl getnews.tech/Cyber+attack # ヘルプの表示 curl getnews.tech/:help
その他
STAR WARS episode IV
# STAR WARS episode IV (思った以上に先のシーンまで作られていました)
curl https://asciitv.fr
Party Parrot (踊るオウム)
# Party Parrot (踊るオウム)
curl parrot.live
Nyan Cat(宙駆けるネコ)
# Nyan Cat(宙駆けるネコ) curl ascii.live/nyan # Nyan Cat(宙駆けるネコ、フルカラーだけど動きは遅い) curl https://poptart.spinda.net
その他(実用的なもの/見た目が派手ではないもの)
自身のIPアドレス情報の取得
IPアドレスを確認できるサイトは数多くありますが、試した中では "whatismyip.akamai.com" のレスポンスが群を抜いていました。
# IP アドレス取得(超速) curl whatismyip.akamai.com # IP アドレス取得(高速) curl curlmyip.net # 追加情報付き(json形式) curl https://ipapi.co/json curl geoplugin.net/json.gp
DNS問い合わせ
curl "api.hackertarget.com/dnslookup/?q=hatenablog.jp"
指定した IPアドレス に対するポートスキャン結果の取得
このサイトではポートスキャンだけでなく、様々なツールが提供されています。
- IP Tools for Security and Network Testing | HackerTarget.com
https://hackertarget.com/ip-tools/
curl -s "https://api.hackertarget.com/nmap/?q={IPアドレス}"
指定した Twitter アカウントの最新ツイートの取得
- GitHub - Decicus/DecAPI: API provider/proxy that provides plaintext responses - Documentation: https://docs.decapi.me/
https://github.com/Decicus/DecAPI
curl -s "https://decapi.me/twitter/latest?name=soji256"
架空のJSOCデータ取得
- JSONPlaceholder - Fake online REST API for testing and prototyping
https://jsonplaceholder.typicode.com/
# ユーザデータ(10件) curl -s "https://jsonplaceholder.typicode.com/users" # コメントデータ(500件) curl -s "https://jsonplaceholder.typicode.com/comments"
架空の人物名(ランダム)取得
- Pseudorandom.Name: Random Name Generator
http://pseudorandom.name/
curl pseudorandom.name
参考文献
curl で叩くと面白いサイトまとめ
Tar and Curl Come to Windows! | Windows Command Line
https://devblogs.microsoft.com/commandline/tar-and-curl-come-to-windows/The Strange Storage: Terminalで天気予報や仮想通貨レートなどをチェックする
https://www.storange.jp/2020/09/check-weather-and-cryptocurrency-rate-on-terminal.html
curl について
curl
https://curl.se/Introduction - Everything curl
https://ec.haxx.se/curl - Frequently Asked Questions
https://curl.se/docs/faq.html#What_is_cURLcurl コマンド 使い方メモ - Qiita
https://qiita.com/yasuhiroki/items/a569d3371a66e365316fcurl - Frequently Asked Questions
https://curl.se/docs/faq.html#What_is_cURLcurlコマンドによるデータ送信あれこれ - wagavulin's blog
https://www.wagavulin.jp/entry/2015/10/18/060938
シェルの使い方について
割りと便利だけど微妙に忘れがちなbashのコマンド・チートシート - Qiita
https://qiita.com/jpshadowapps/items/d6f9b55026637519347fLinuxのリダイレクトの使い方と種類!標準出力・入力・エラーやパイプについても解説 | アプリやWebの疑問に答えるメディア
https://applica.info/linux-redirectぱそくま パソコンなんでも辞典 | Linux > シェル > bash リダイレクト(出力)
http://www.pasokuma.net/linux/os/shell/bashredirect.htmlぱそくま パソコンなんでも辞典 | Linux > シェル > bashの記号(不等号)
http://www.pasokuma.net/linux/os/shell/bashspecialchars2.htmlLinuxのパイプをちょっとだけ理解する - Qiita
https://qiita.com/akym03/items/aadef9638f78e222de22
その他
- Tar and Curl Come to Windows! | Windows Command Line
https://devblogs.microsoft.com/commandline/tar-and-curl-come-to-windows/
付録:"curl -F-=\<-" について
QRコードを生成してくれるサイト「qrenco.de」でサンプルとして記載されていた curl コマンドの引数が不思議だったので調べてみました。 なお、インターネット上の情報等と動作検証とに基づき記載していますが、正確な内容ではないかもしれません。
仕様まわりの確認
- "-F" は "<name=content>" の形でデータを渡すことで multipart 形式で POST してくれるオプションでした。
- また、bash ではハイフン("-")により標準入出力とのやりとりができる機能があるそうです。
- ただし、イコールの直前にあるハイフンは文字列の "-" として認識されているようです。
- そして、"\<" は引数内で展開された時点でリダイレクトとして認識されるようにしているものと考えました。
実際の挙動の確認
実際に printf "Good luck.\nMay The Force Be With You." | curl -F-=\<- qrenco.de
の後半部分の引数を少しずつ変えてパケットを見てみました。
検証1:「curl -F-=\<- qrenco.de」(テンプレートのまま変更なし)
- パケットでは「name="-"」となっているのが確認できます。
--------------------------ef0d12389abc4567 Content-Disposition: form-data; name="-" Good luck. May The Force Be With You. --------------------------ef0d12389abc4567--
検証2:「curl -Fa=\<- qrenco.de」(イコールの前の文字を "a" に変更)
- パケットでは「name="a"」となっているのが確認できます。
--------------------------01f89abc67de2345 Content-Disposition: form-data; name="a" Good luck. May The Force Be With You. --------------------------01f89abc67de2345--
検証3:「curl -F=\<- qrenco.de」(イコールの前の文字を削除)
- パケットでは「name」部分が無くなっていることが確認できます。
--------------------------9abc678def345012 Content-Disposition: form-data Good luck. May The Force Be With You. --------------------------9abc678def345012--
結論
以上から "-F-=\<-" は "-F name=content" の "name" が "-" に "content" が標準入力からのリダイレクト("<-")に設定されているものと考えました。
直前のパイプでつながれている printf の出力内容が "content" として読み込まれて curl が実行されることになるので、 結果的には直観的な理解と同じく、printf の結果がそのまま QR コードの文字列として渡されている形です。
イコールの直後を文字列に変えてみたり、引数の要素を一文字ずつ削除してエラー状況を確認したりした結果も特に結論に反するものはありませんでした。
付録:curl という名称と読み方について
発音自体は "カール" といった感じでいいようですが "しーゆーあーるえる" とも読めて、その場合は "see URL" と聞こえるのも楽しいよねという話も。
- curl - Frequently Asked Questions
https://curl.se/docs/faq.html#What_is_cURL
1.1 What is cURL?
cURL is the name of the project. The name is a play on 'Client for URLs', originally with URL spelled in uppercase to make it obvious it deals with URLs. The fact it can also be pronounced 'see URL' also helped, it works as an abbreviation for "Client URL Request Library" or why not the recursive version: "curl URL Request Library".
- The name - Everything curl
https://ec.haxx.se/curl/curl-name
Pronunciation
Most of us pronounce "curl" with an initial k sound, just like the English word curl. It rhymes with words like girl and earl. Merriam Webster has a short WAV file to help.
更新履歴
- 2021-01-11 新規作成
- 2023/01/10 一部リンク切れの旨を追記
*1:cmd.exe より表示が綺麗な感じがします。もちろん気のせいです。