Cloudflare API

由於有個網站使用 Let's Encrypt - Free SSL/TLS Certificates ,且還有用 Cloudflare
在測試 auto renew 時發現需要關閉 CDN 的功能其 renew 的功能才能正常
不然都會噴 「Error - 已發生類型 'PKISharp.WACS.AuthorizationFailedException' 的例外狀況」 這樣的錯誤訊息,詳細如下圖:


在人為不介入的狀況下關閉 CDN 就只能靠 Cloudflare API 了

研究了許久,在這裡看到可以透過 API 關閉 CDN 的方法
初期在 linux 環境下測試時都很正常,但一切到 Windows Server 就不行了
這時候只好再請估狗大神幫忙找,看來也有人和我遇到一樣的問題,解法如下
# On Linux
--data '{"purge_everything":true}'

# On Windows
--data "{\"purge_everything\":true}"

在 linux 時和 Windows 不同,如上所述,有單雙引號要改

我的批次檔長相如下

@echo off
set MAIL=your_email_address@example.com
set KEY=your_key(這個要到 Cloudflare 網頁的 Overview 去查)
set ZONE_ID=your_ZONE_ID(這個要看這裡去查)
set DNS_Record_ID=your_DNS_recoed(這個要看這裡去查)
set TYPE=dns_record_type(我要改的是A record,所以我打A)
set NAME=www.example.com(我這邊是設定要改的項次的域名)
set CONTENT=IP(我這邊是設定要改的項次的IP)
set PROXIED=true(這邊是開關,true是開,false是關)

curl -X PUT  https://api.cloudflare.com/client/v4/zones/%ZONE_ID%/dns_records/%DNS_Record_ID% -H "Content-Type:application/json" -H "X-Auth-Key:%KEY%" -H "X-Auth-Email:%MAIL%" --data "{\"type\":\"%DNS_TYPE%\",\"name\":\"%NAME%\",\"content\":\"%CONTENT%\",\"proxied\":%PROXIED%,\"ttl\":%TTL%}"


排版很亂,所以要慢慢看

這邊我靠著修改 PROXIED 這個變數來控制 CDN 的開和關
做法是產兩個除了 PROXIED 以外一模一樣的批次檔,中間就夾 letencrypt 的 renew 指令,然後把它放到工作排程器程式庫中就好了

留言