[C#] 透過程式 查看/開啟/關閉 Cloudflare Development Mode

之前寫過幾篇文章說到,關於透過 API TOKEN 去修改 Cloudflare 的 DNS  紀錄 ,有時候在 Cloudflare 有點麻煩的是 如果修改一張圖片會因為有 cloudflare CDN cache 的問題,這是好事也是壞事,之後我想到一個方法,就是如果在準備修改之前,當然你可以設計在進入到客戶在進入管理後台的時候,偷偷的先打開 development mode ,反正開始後三小時會關閉 development code  機制,這樣也是一個好方法,這樣就可以閃躲 cache 問題…
 

首先你要先去 https://dash.cloudflare.com/profile/api-tokens ,產生一個 token 記得這次產生的時候要先選 Edit Zone DNS 

 
 

 

之後這兩個參數也要開

 

不然你會遇到 回應訊息 是這樣的錯誤 
"{"success":false,"errors":[{"code":9109,"message":"Unauthorized to access requested resource"}],"messages":[],"result":null}"

1. 查看 是否開啟 Development Mode

我整理得很簡單,直接看 Code 

            HttpClient clientGetZones = new HttpClient();
            clientGetZones.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer API_TOKEN");
            var url1 = "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/development_mode";

            /*
                       curl -X GET "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/development_mode" \
                     -H "X-Auth-Email: user@example.com" \
                     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
                     -H "Content-Type: application/json"
             */

            /* 
                Response Result
                 
                 {
                        "success": true,
                        "errors": [],
                        "messages": [],
                        "result": {
                        "id": "development_mode",
                        "value": "off",
                        "editable": true,
                        "modified_on": "2014-01-01T05:20:00.12345Z",
                        "time_remaining": 3600
                    }
                }
            */

            var res = clientGetZones.GetAsync(url1).Result.Content.ReadAsStringAsync().Result;

            // true for open , false for close
            var isOpenDeveloperMode=JObject.Parse(res)["result"]["value"].ToString()!= "off";
       


2. 開啟或是關閉 ,這裡面就是切換 on or off 

            HttpClient clientGetZones = new HttpClient();
            clientGetZones.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            clientGetZones.DefaultRequestHeaders.Add("Authorization", " Bearer API_TOKEN");
            var url1 = "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/development_mode";
            /*
                      curl -X PATCH "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/development_mode" \
                    -H "X-Auth-Email: user@example.com" \
                    -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
                    -H "Content-Type: application/json" \
                    --data '{"value":"off"}'
           */


            HttpRequestMessage requestMessage = new HttpRequestMessage(new HttpMethod("PATCH"), url1);
             
            // For Close Dev Mode.
            //requestMessage.Content = new StringContent("{\"value\":\"off\"}", Encoding.UTF8, "application/json");
            
            // For Open Dev Mode.
            requestMessage.Content = new StringContent("{\"value\":\"on\"}", Encoding.UTF8, "application/json");
            HttpResponseMessage response = clientGetZones.SendAsync(requestMessage).GetAwaiter().GetResult();

            var res = response.Content.ReadAsStringAsync().Result.ToString();
            //Response :
            //{"result":{"id":"development_mode","value":"on","modified_on":"2020-11-27T08:36:27.345871Z","time_remaining":10800,"editable":true},"success":true,"errors":[],"messages":[]}

      


整理一下,因為有需要所以筆記一下給需要的人,也怕我自己忘記…

--

本文原文首發於我的個人部落格:透過程式 查看/開啟/關閉 Cloudflare Development Mode

---

Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.