2016-02-10 44 views
5

Czy ktoś inny był w stanie usunąć purge_everything z CFHTTP? Nie mogę sprawić, że ColdFusion CFHTPTP uda się wyczyścić pamięć podręczną strefy CloudFlare. Ale jestem w stanie robić inne rzeczy, takie jak strefy list, itp. Więc wiem, że mogę z powodzeniem CFHTTP do API CloudFlare.CFHTTP i CloudFlare API: DELETE purge_everything nie działa

to curl komenda, która działa:

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}' 

Błąd zwracany jest:

{ "sukces": false, "błędy": [{ "code": 1012 "message": "Zamówienie zawierać jeden z \" purge_everything \”lub \ "Files \", lub \ "tagów"}], "wiadomości": [], "wynik": null}

Próbowałem tak wiele kombinacji kodu ... Są różne zmienne Próbowałem:

<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 /> 

... i tutaj są pewne różne kombinacje połączeń zrobiłem ...

<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> 

Próbowałem również zi bez atrybutu "Zakodowany", z atrybutem "Kodowanie" i bez niego we wszystkich miejscach.

Każda pomoc jest doceniana.

+0

Skąd otrzymałeś identyfikator strefy? Nie mam pojęcia, co go zastąpić lub gdzie znajdę informacje na ten temat https://api.cloudflare.com/client/v4/zones/:identifier/purge_cache – Lion789

Odpowiedz

2

Nie jesteś pewien, którą wersję CF używasz. Jednak podejrzewam, że nie robisz nic złego, ale to <cfhttp> po prostu nie wysyła ciała, gdy method="DELETE", co miałoby sens, biorąc pod uwagę komunikat o błędzie.

Prostym sposobem na sprawdzenie jest skierowanie wywołania <cfhttp> do strony testowej na lokalnym serwerze CF. Na stronie testowej zrzutu GetHttpRequestData(), aby wyświetlić rzeczywiste nagłówki i przesłane treści. (Inną opcją jest użycie built in TCPMonitor na otwartym porcie, który zapewnia więcej szczegółów na temat zarówno żądania i odpowiedzi. Jednak w tym scenariuszu, pierwsza metoda jest najprostsza.)

Strona testowa

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

Zapytanie

<!--- 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> 

Wskazówka treść lub ciała, jest pusta, kiedy method="DELETE"? Jednak zmień go na method="POST", a zawartość pojawi się w magiczny sposób.

GetHttpRequestData() - Method=DELETE

Sending a body with a DELETE request powinien być ważny, tak to brzmi jak robaka. Jeśli tak, to musisz znaleźć inne narzędzie, aby utworzyć żądanie http, takie jak wywołanie programu curl.exe z cfexecute lub użycie niestandardowego tagu, takiego jak cfx_http5, lub użyć klas java, takich jak URLConnection lub Apache's HTTPClient.

+0

Dobrze spisuję się i dziękuję za sugerowane obejścia. Po zamieszczeniu mojego pytania, pracowałem nad nim więcej i doszedłem do tego samego wniosku co ty - CFHTTP nie opublikuje ciała, gdy metoda jest DELETE. – Jules

+1

Tak, brzmi to tak, jakby nie był jawnie verboten, więc byłoby miło, gdyby było jakieś wskazanie, że cfhttp zamierza po prostu zignorować ciało. Przynajmniej ludzie nie będą drapać głowami, zastanawiając się, co poszło nie tak ... – Leigh

0

Po przeczytaniu niektórych dokumentów wygląda na to, że interfejs API CloudFlare miesza metody w sposób niezgodny z CFHTTP.

Interfejs API CloudFlare informuje o użyciu metody DELETE i nagłówka typu treści "application/json". Ich przykładem jest dokładny:

$ 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}' 

Jednakże kiedy używa --data, zwijanie umieści o zawartości typu aplikacji/x WWW postać urlencoded. https://curl.haxx.se/docs/manpage.html#-d

CFHTTP ma jednak następujące specyfikacje. POST służy do wysyłania danych. DELETE służy do usuwania URI.

Kiedy CFHTTP z POST pojawia się błąd, że DELETE jest akceptowana tylko dla URI. Kiedy I CFHTTP z DELETE, żadna treść nie jest POSTed.

Moje obejście, bez wychodzenia ze standardowego CFML, polegało na wykorzystaniu ich API v1. Działa jak mistrz. https://www.cloudflare.com/docs/client-api.html

+0

Skąd wziął się identyfikator strefy od pomysłu, gdzie szukać? – Lion789

+0

Najpierw wymień wszystkie swoje strefy: https://api.cloudflare.com/#zone-list-zones Stamtąd znajdziesz domenę i jej identyfikator strefy. – Jules