coldfusion - सीएफएचटीटीपी और क्लाउडफ़्लैयर एपीआई: हटाए गए purge_everything काम नहीं कर रहा है




cloudflare cfml (2)

क्या किसी और को CFHTTP के साथ purge_everything को हटा सकता है? मुझे क्लाउडफ़्लैयर ज़ोन के कैश को सफलतापूर्वक शुद्ध करने के लिए ColdFusion CFHTTP नहीं मिल सकता है लेकिन मैं अन्य क्षेत्रों जैसे सूची क्षेत्रों, आदि करने में सक्षम हूं। इसलिए मुझे पता है कि मैं क्लाउडफ़्लैयर के एपीआई को सफलतापूर्वक CFHTTP कर सकता हूं।

यह कर्ल कमांड है, जो काम करता है:

curl -svX DELETE -H 'X-Auth-Email: [email protected]' -H 'X-Auth-Key: XYZ' https://api.cloudflare.com/client/v4/zones/xxxxxxx/purge_cache  -H 'Content-Type: application/json' --data '{"purge_everything":true}'

इस त्रुटि को वापस आ गया है:

{"सफलता": गलत, "त्रुटियां": [{"कोड": 1012, "संदेश": "अनुरोध में एक \" purge_everything \ "या \" files \ ", या \" टैग "}]," संदेश ": []," परिणाम ": अशक्त}

मैंने कोड के कई संयोजनों की कोशिश की है ... ये मैंने कोशिश की है विभिन्न चर रहे हैं:

<cfset stFields = '{"purge_everything":true}'>
<cfset stFieldsJson = {"purge_everything":true}>
<cfset stFieldsJson2 = {
    "fields" : {
        "purge_everything"  : true
    }
}>  
<cfset stFieldsJson3 = {
    "purge_everything"  : true,
    "fields" : {
        "purge_everything"  : true
    }
}>  

<cfset tmp = {} />
<cfset tmp['purge_everything'] = true />

... और यहां मैंने कुछ अलग कॉल किए हैं ...

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value="#serializeJson(stFieldsJson)#" encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value="#serializeJson(stFieldsJson2)#" encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value="#serializeJson(stFieldsJson3)#" encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value="#serializeJson(tmp)#" encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value='{"purge_everything":true}' encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value='"purge_everything":true' encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value='purge_everything' encoded="false">
</cfhttp>   
<cfdump var="#cFlare#"><Cfflush>

मैंने सभी जगहों पर 'वर्णित' विशेषता के साथ और बिना 'एन्कोडेड' बॉडी विशेषता के बिना और बिना कोशिश की है

किसी भी मदद की सराहना की है


कुछ डॉक्स पर पढ़ने के बाद, ऐसा प्रतीत होता है कि क्लाउडफ़्लैअर एपीआई एक तरह से तरीके मिश्रण कर रही है कि CFHTTP नहीं करेगा

CloudFlare के एपीआई "एप्लिकेशन / जेएसन" के DELETE विधि और सामग्री प्रकार शीर्षक का उपयोग करने के लिए कहता है। उनका सटीक उदाहरण है:

$ curl -X DELETE "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/purge_cache" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'

हालांकि, जब कोई डेटा का उपयोग करता है, तो क्यूल सामग्री-प्रकार एप्लिकेशन / x-www-form-urlencoded के साथ पोस्ट होगा। https://curl.haxx.se/docs/manpage.html#-d

CFHTTP हालांकि चश्मा निम्नलिखित है पोस्ट को डेटा भेजने के लिए उपयोग किया जाता है DELETE यूआरआई हटाने के लिए है

जब मैं पोस्ट के साथ CFHTTP मुझे एक त्रुटि मिलती है जो केवल यूआरआई के लिए केवल DELETE स्वीकार कर लेती है I जब मैं DELETE के साथ CFHTTP, कोई भी सामग्री पोस्ट नहीं की जा रही है।

मानक सीएफ़एमएल के बाहर जाने के बिना, मेरे कामकाज, उनके v1 API का उपयोग करना था यह एक विजेता की तरह काम कर रहा है https://www.cloudflare.com/docs/client-api.html


सुनिश्चित नहीं है कि आप किस सीएफ का चल रहे हैं हालांकि, मुझे संदेह है कि आप कुछ भी गलत नहीं कर रहे हैं, लेकिन यह कि <cfhttp> कोई method="DELETE" नहीं भेज रहा है जब method="DELETE" , जो त्रुटि संदेश को समझने में सक्षम होगा

इसका परीक्षण करने का एक आसान तरीका यह है कि आपका स्थानीय सीएफ़ सर्वर पर एक परीक्षण पृष्ठ पर <cfhttp> कॉल करें परीक्षण पेज पर GetHttpRequestData() डंप करें ताकि आप वास्तविक हेडर और सामग्री सबमिट कर सकें। (एक अन्य विकल्प एक खुला पोर्ट पर निर्मित टीसीपीओ मॉनिटर का उपयोग करना है, जो अनुरोध और प्रतिक्रिया दोनों के बारे में अधिक विस्तार प्रदान करता है। हालांकि, इस परिदृश्य के लिए, पहली विधि सरल है।)

टेस्ट पेज

<!--- echo request headers and content --->
<cfdump var="#getHTTPRequestData()#">

निवेदन

<!--- simulate request --->
<cfset requestBody["purge_everything"] =  true>
<cfhttp url="http://localhost/testPage.cfm" method="DELETE" result="cFlare"  charset="utf-8" >
    <cfhttpparam type="header" name="X-Auth-Email" value="[email protected]">
    <cfhttpparam type="header" name="X-Auth-Key" value="XYZ">
    <cfhttpparam type="header" name="Content-Type"  value="application/json; charset=utf-8">
    <cfhttpparam type="header" name="accept"  value="*/*">
    <cfhttpparam type="body" value="#serializeJson(requestBody)#" encoded="false">
</cfhttp>  

<!--- display request headers and content --->
<cfoutput>#cFlare.fileContent#</cfoutput>

method="DELETE" जब सामग्री, या शरीर, नोटिस खाली है? हालांकि, इसे method="POST" बदलें और सामग्री जादुई दिखाई देती है।

एक DELETE अनुरोध के साथ एक शरीर भेजना मान्य होना चाहिए, इसलिए यह एक बग की तरह लग रहा है यदि हां, तो आपको एचटीटीपी अनुरोध बनाने के लिए एक अलग उपकरण खोजने की आवश्यकता होगी, जैसे कि cfexecute से cfexecute को cfexecute , या cfx_http5 जैसे कस्टम टैग का उपयोग करना, या यूआरसी कनेक्शन या अपाचे के HTTP क्लाइंट जैसे जावा क्लासेस का उपयोग करना होगा