无法使用Ruby的net / http库进行HTTP删除请求

时间:2016-04-11 18:41:09

标签: ruby http

我一直在尝试对我的服务器进行API调用,以删除dev数据库上的用户记录帮助。当我使用Fiddler通过DELETE操作调用URL时,我能够立即删除用户记录。当我从下面的脚本中再次使用DELETE操作调用相同的URL时,我收到此错误:

{"消息":"请求的资源不支持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 个答案:

答案 0 :(得分:0)

事实证明我输错了命令。我需要改变这一行:

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

到这一行:

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

通过输入uri.path,我从API调用中排除了部分网址。当我调试时,我会输入puts uri,这会显示完整的URL,所以我确定网址是正确的。 URL ,但我没有在DELETE调用中包含完整的URL。

答案 1 :(得分:0)

如果您在请求删除时错过了要传递的参数,将无法使用

你可以这样做

uri = URI.parse('http://localhost/test')
http = Net::HTTP.new(uri.host, uri.port)
attribute_url = '?'
attribute_url << body.map{|k,v| "#{k}=#{v}"}.join('&')
request = Net::HTTP::Delete.new(uri.request_uri+attribute_url)
response = http.request(request)

其中body是一个哈希表,您可以在其中将查询参数定义为哈希表..在发送请求时,可以通过上面的代码将其添加到url中。

例如:body = { :resname => 'res', :bucket_name => 'bucket', :uploaded_by => 'upload' }