2016-03-16 36 views
3

上的ColdFusion 11以下腳本塊具有GetHttpRequestData().content爲hello確實的ColdFusion 11的支撐體內容HTTP DELETE動詞

如果我改變動詞來刪除它是空的。

所以......

  • 不ColdFusion的不是通過cfhttp提出請求時,支持呢?
  • 這是錯誤的方式?
  • 是否有解決方法?

代碼:

cfhttp(method="POST", charset="utf-8", url="http://x/showrequest.cfm", result="result") { 
    cfhttpparam(name="body", type="body", value="hello"); 
} 

writeOutput(result.filecontent);abort; 
+1

的主體內容是不需要的刪除請求 - http://stackoverflow.com/a/299696/1636917 –

+0

@米格爾-F - 真的,儘管我懷疑一些API的不使用它。聽起來像OP可能正在使用這樣一個API和cfhttp可能不會返回值(這不會讓我感到吃驚)。 – Leigh

+0

你可能是正確的@Leigh。這個問題中缺乏細節很難說清楚。 –

回答

1

解決方法是用java(發抖)。我確定有更多的幫手庫可以更簡潔地完成這個工作,但是現在是這樣。

<cfscript> 
var u = createObject("java", "java.net.URL").init("https://api.cloudflare.com/client/v4/zones/#site.zoneId#/purge_cache"); 
var req = u.openConnection(); 
req.setRequestMethod("DELETE"); 
req.setDoOutput(true); 
req.setRequestProperty("Content-Type", "application/json"); 
req.setRequestProperty("X-Auth-Email", "xxxxx"); 
req.setRequestProperty("X-Auth-Key", "xxxx"); 
var os = req.getOutputStream(); 

os.write(javaCast("string",'{"files":#serializeJSON(urls)#}').getBytes("UTF-8")); 
os.close(); 
ret = req.getResponseMessage(); 

var i = req.getInputStream(); 
var br = createObject("java", "java.io.BufferedReader").init(createObject("java", "java.io.InputStreamReader").init(i)); 
var sb = createObject("java", "java.lang.StringBuilder").init(); 

var line = br.readLine(); 
while(!isNull(line)){ 
    sb.append(line); 
    line = br.readLine(); 
} 
req.disconnect(); 


</cfscript> 
<cfdump var="req.getResponseCode() = #req.getResponseCode()#"> 
<cfdump var="#ret#"> 
<cfdump var="#sb.toString()#"> 
+0

如果需要,不要忘記檢查狀態碼和錯誤流,以便知道是否發生意外錯誤。 http://stackoverflow.com/questions/18153249/how-do-i-see-the-message-for-a-http-response-code-406-exception/18154731#18154731 – Leigh