【问题标题】:Cannot make HTTP Delete request with Ruby's net/http library无法使用 Ruby 的 net/http 库发出 HTTP 删除请求
【发布时间】:2016-04-11 18:41:08
【问题描述】:

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

{"Message":"请求的资源不支持http方法'DELETE'。"}

我在下面的脚本中更改了网址。我使用的网址绝对正确。我怀疑我的代码中有一个我没有发现的逻辑错误。我的脚本:

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

【问题讨论】:

  • 消息说问题出在 API 上,而不是请求本身,The requested resource does not support http method 'DELETE'
  • 我放在上面的代码是一个脚本的一小部分,它大约有 1000 行长,并命中了近 20 个不同的 API 调用,执行 GET、POST、PUT 和 DELETE。从我的脚本调用时,每个单独的 DELETE 调用都会失败,但在放入 Fiddler 并单独调用时工作得很好。我的脚本正在做的事情和 Fiddler 正在做的事情之间存在一些差异。我怀疑这与通过我的脚本 VS 通过 Fiddler 发送的请求标头有关。
  • 我发现了我的问题所在。我需要这样做:request = Net::HTTP::Delete.new(uri)。这立即解决了我的问题

标签: ruby http


【解决方案1】:

原来我输入了错误的命令。我需要更改这一行:

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

到这一行:

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

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

【讨论】:

    【解决方案2】:

    如果您在请求删除时错过了要传递的参数,它将不起作用

    你可以这样做

    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 是一个 hashmap,您可以在其中将查询参数定义为 hashmap.. 在发送请求时,它可以通过上面的代码加入 url。

    例如:body = { :resname =&gt; 'res', :bucket_name =&gt; 'bucket', :uploaded_by =&gt; 'upload' }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多