CloudflareのAPIで苦労した

CloudflareではAPIを使って各種操作ができますが、初めて使ってみて苦労した部分があったので書き留めておこうと思います。


Cloudflare API



基本的にはCloudflareのサイトにアクセスして設定を変更するなどの操作をすれば良いのですが、中にはAPIを使わないと変更できないものがあります。例えばNetworkの設定項目にある「IPv6 Compatibility」の設定ですが、デフォルトではONになっていて何かしらの理由でOFFにしたい時に以前はクリック1つでON/OFFが切り替えられましたが、現在はAPIを使わないとOFFにできないようになっています。

Change IPv6 setting



そこで登場するのがcURLです。全く使った事が無かったので例文通りにコマンドを打ち込めば何とかなるだろうと思っていたのが甘かった。何度やってもエラー続きでサポートチケットを発行して質問までしてしまいましたが、返事を待っている間に自力解決する事ができました。



2018年4月かr配布されたWindows 10 Ver.1803 (RS4) からWindows内蔵版(?)cURLが搭載されています。コマンドプロンプトで「where curl」と入力すると「C:\Windows\System32\curl.exe」と表示されます。ただWindows内蔵版の使い方がいまいち分からなかったので、cURLの公式サイトから素直に「Windows 64 bit 7.68.0 binary Viktor Szakats」をダウンロードしてきて使いました。



cURL



cURL Windows 64 bit




Cloudflare API v4 Documentationによれば、Networkの設定項目にある「IPv6 Compatibility」の設定をOFFにするためには下記の例文に従ってcURLコマンドを打てばよい・・・はずですが上手くいきません。

cURL (example)




curl -X PATCH “https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/ipv6” \
-H “X-Auth-Email: [email protected]” \
-H “X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41” \
-H “Content-Type: application/json” \
–data ‘{“value”:”off”}’



「zones/023e105f4ecef8ad9ca31a8372d0c353/」の文字列はCloudflareのホーム画面から変更したいドメインをクリックして最初に表示される「Overview」ページ右下にあるAPIと書かれた部分にある「Zone ID」に書き換えます。

「X-Auth-Email: [email protected]」の部分は自身で登録したメールアドレスに書き換えます。

「X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41」の部分はZone IDの2つ下に記載されている「Get your API token」をクリックして開いたページにある「Global API Key」を入力します。Zone IDのすぐ下にAccount IDという項目がありますが、これではありませんので要注意です。

コマンドプロンプトを使う場合、バックスラッシュ「\」は「¥」となります。



これで入力すると「’-H’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とエラーが出ます。そうです、改行が入っているとコマンドプロンプトではエラーになります。



curl -X PATCH “https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/ipv6” \ -H “X-Auth-Email: [email protected]” \ -H “X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41” \ -H “Content-Type: application/json” \ –data ‘{“value”:”off”}’

次に改行を無くして上記の通り入力すると「Malformed JSON in request body」というエラーが発生します。じぇいそんめぇぇぇ!



ここで行き詰ってしまいサポートに質問をしたのですが、2日間いろいろ調べて下記の通りコマンドを修正した所、すんなりと正常なレスポンスが返って来ました。

curl -X PATCH “https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/ipv6” -H “X-Auth-Email: [email protected]” -H “X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41” -H “Content-Type: application/json” –data “{¥”value¥”:¥”off¥”}”

各行の後ろにあった「\」を削除。'{“value”:”off”}’のシングルクォーテーションを「ダブルクォーテーション」に変更。ダブルクォーテーションで囲まれた“value”:”off”の文字列は「¥」でエスケープして「¥”value¥”:¥”off¥”」とする

これで正常にレスポンスが返って来ます。



ここに辿り着くまで徹夜して約2日の時間がかかりました。Webサイト上でON/OFFできるようにしておいてくれたら良いのにと思いましたが、いろいろな事情があって推奨されない設定には安易に変更できないようにしているのかも知れません。

cURLやAPIに詳しい方からすれば簡単な話かも知れませんが、プログラミング経験が1年くらいしか無い自分には大きな壁でした。聞けば教えてくれそうな人はいましたが自力で解決した事って忘れないものなので良い経験になったと思います。



難しい事も多いけど奥深い。だからITって面白い!