ライブラリ「libcurl」
(everything.curl.dev)--libcurl の使い方
- libcurl の使用を推奨: ユーザーには、まず curl コマンドラインツールを使って望む転送を試し、だいたい期待どおりに動作したら、コマンドラインに
--libcurl [ファイル名]オプションを追加して再実行することが推奨される。 - コード生成:
--libcurlコマンドラインオプションは、指定されたファイル名で C プログラムを生成する。この C プログラムは libcurl を使って、curl コマンドラインツールが実行した転送を実行する。 - 例外と違い: 常に 100% 一致するわけではないが、使いたい libcurl オプションや追加引数について優れたヒントを与えてくれる。
サンプルコード
- 実行例:
curl http://example.com --libcurl example.cコマンドを実行すると、現在のディレクトリにexample.cファイルが生成される。 - 生成されたコード: 生成されたコードには、
curl_easy_setopt()を使ったさまざまなオプション設定が含まれており、一部のオプションはソースとして簡単に生成できないため、ユーザーが自分で実装するか使用しない場合もある。
GN⁺の意見
- libcurl の有用性: この機能は、開発者がコマンドラインで動作する curl コマンドを C プログラムへ簡単に変換できるようにし、libcurl を使うアプリケーション開発を加速させる。
- コード生成の利点: 自動生成されたコードは、開発者が libcurl API をより速く理解して適用するのに役立つ。
- 学習ツールとしての価値: 初級ソフトウェアエンジニアにとって、libcurl オプションやネットワークプログラミングの実際の適用例を示す優れた学習資料になり得る。
1件のコメント
Hacker Newsのコメント
ブラウザの開発者ツールのネットワークタブで目的のリクエストを見つけて「copy as curl」でコピーし、https://curlconverter.com/ のようなツールで使いたい言語のリクエストコードに変換するパターンはとても良い
ある意味で curl はどこへでも翻訳できる 中間表現 のように使われている
curl_translate関数で「copy as curl」コマンドをリクエストコードに変換できるhttps://httr2.r-lib.org/reference/curl_translate.html
ブラウザの「copy as curl」は認証やエンコーディングのヘッダーが確実に動く状態で入るので、自分で複数行の curl コマンドをいじるよりずっと便利
リクエストパラメータを変えてローカルインスタンスに投げてみることもできるし、
jqにパイプして出力形式を整えることもできるあまりにも広く使われているので、リクエストを cURL に書き出すツールも生まれ、cURL を取り込むツールも生まれている
コマンドラインインターフェースに、現在のコマンドと同じことをする プログラムのソースコード を吐き出すフラグがあるのはかなり素晴らしい
ボンネットを開けて内部で何が起きているかを見せる感じで、動作をよりよく理解できるだけでなく、必要に応じて修正や拡張もしやすくなる
libcurlを使っていて範囲リクエストのようなものが必要になったり、ブラウザのネットワークタブで「copy as curl」をしたりしたなら、コマンドラインで実行してから--libcurlを付けるだけで、C ライブラリ で正確にどうやるのか分かるこのような仕組みは Microsoft Office の Visual Basic マクロ が成功した理由の一つだった
Word や Excel で操作を実行し、生成されたマクロを見て、そのコードを自分の用途に合わせて修正できた。単純だが強力な概念で、curl でも見られるのはうれしい
かなり長く更新されていないようだ: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
Amiga の AREXX も思い出す
コンパイルするには、
gccで-lcurlを付けるように libcurl へのリンク を指定する必要があるたとえば
curl https://ifconfig.me --libcurl ip_fetcher.cで IP アドレスとip_fetcher.cを作り、gcc -o ip_fetcher ip_fetcher.c -lcurlでコンパイルしてから./ip_fetcherを実行すれば IP アドレスが出力される毎日 C コードを書くわけではない人にとっては、こうした基本的なリンク手順も役立つ情報
ccコマンドを打つよりmakeのほうが楽なら、もっと簡単な方法もあるcurl https://ifconfig.me --libcurl ip_fetcher.cの後にmake LDFLAGS=-lcurl ip_fetcher、それから./ip_fetcherを実行すればよい少し宣伝すると、Hurl は libcurl を利用してプレーンテキストで HTTP リクエストを実行・テストするオープンソース CLI
libcurl の高い信頼性や HTTP/3 のような機能を使いつつ、リクエストの連結、レスポンスからのデータ取得と次のリクエストへの受け渡し、JSONPath・XPath のようなレスポンステスト機能を追加している
REST/SOAP/GraphQL API リクエスト向けの糖衣構文もあるが、核となるのは単なる libcurl で、verbose オプションを使えば curl コマンドも grep できる。自分はメンテナーとして参加している
https://hurl.dev
こういう機能が ffmpeg にもあるといい
Daniel Stenberg は細部や開発者・ユーザー体験を本当に丁寧に気にかけている
ここまで磨き込まれているのは驚くべきこと
Daniel Stenberg 本人が curl のコマンドラインオプションの大半を見ていく 3時間の動画 で、このオプションにも触れていた記憶がある
https://www.youtube.com/watch?v=V5vZWHP-RqU
投稿タイトルは全角ダッシュとハイフンの組み合わせ(
—-)ではなく、ハイフン2つ(--)であるべきこのオプションは、もともと curl 呼び出しを包んでいたスクリプトの代わりになる コンパイル可能な C プログラム を作ってくれるという意味?
libcurlでは元から可能だったが、これまでは 定型コード を自分で書く必要があった数時間ドキュメントを掘り返さずに済む出発点と考えるのが適切