2016-04-11 111 views
0

我一直在嘗試對我的服務器進行API調用,以刪除開發數據庫上的用戶記錄幫助。當我使用Fiddler通過DELETE操作調用URL時,我可以立即刪除用戶記錄。當我打電話的同一網址再次刪除操作時,從下面我的劇本,我得到這個錯誤:無法使用Ruby的淨/ HTTP庫進行HTTP刪除請求

{「消息」:「所請求的資源不支持HTTP方法‘刪除’。」}

我在下面的腳本中更改了網址。我使用的網址絕對正確。我懷疑我的代碼中有一個邏輯錯誤,我沒有發現。我的腳本:

require 'net/http' 
require 'json' 
require 'pp' 
require 'uri' 

def deleteUserRole 
    # prepare request 

    url= "http://my.database.5002143.access" # dev 
    uri = URI.parse(url) 
    request = Net::HTTP::Delete.new(uri.path) 
    http = Net::HTTP.new(uri.host, uri.port) 

    # send the request 
    response = http.request(request) 

    puts "response: \n" 
    puts response.body 
    puts "response code: " + response.code + "\n \n" 

    # parse response 
    buffer= response.body 
    result = JSON.parse(buffer) 

    status= result["Success"] 
    if status == true 
    then puts "passed" 
    else puts "failed" 
    end 
end 

deleteUserRole 
+2

該消息表示問題出在API上,而不是請求本身'所請求的資源不支持http方法'DELETE'' – MurifoX

+0

上面的代碼是腳本的一小部分,大約有1000行並接近20個不同的API調用,執行GET,POST,PUT和DELETE。從我的腳本調用時,每個DELETE調用都會失敗,但放入Fiddler並單獨調用時工作正常。我的腳本在做什麼和Fiddler在做什麼之間有一些區別。我懷疑它與通過我的腳本VS通過Fiddler發送的請求標頭有關。 – Max

+0

我發現了我的問題。我需要做的是:'request = Net :: HTTP :: Delete.new(uri)'而不是。這立即解決了我的問題 – Max

回答

0

事實證明,我輸入了錯誤的命令。我需要這一行改變:

request = Net::HTTP::Delete.new(uri.path) 

這一行:

request = Net::HTTP::Delete.new(uri) 

通過鍵入uri.path我被排除在API調用的URL的一部分。當我正在調試時,我會輸入puts uri,那會顯示完整的URL,所以我確信URL是正確的。 URL 的權利,但我沒有在我的DELETE調用中包含完整的URL。