Ruby 的 body_permitted?给出的方法 "NoMethodError"
Ruby's body_permitted? method giving "NoMethodError"
我正在浏览 ruby 的 Net::HTTP class。每次我 运行 这个代码来自 Net::HTTP doc
#!/usr/bin/ruby
require 'net/http'
uri = URI('http://example.com/index.html')
res = Net::HTTP.get_response(uri)
# Headers
res['Set-Cookie'] # => String
res.get_fields('set-cookie') # => Array
res.to_hash['set-cookie'] # => Array
puts "Headers: #{res.to_hash.inspect}"
# Status
puts res.code # => '200'
puts res.message # => 'OK'
puts res.class.name # => 'HTTPOK'
# Body
puts res.body if res.response_body_permitted?
我收到这个错误
netHTTP.rb:18:in `<main>': undefined method `response_body_permitted?' for #<Net::HTTPOK 200 OK readbody=true> (NoMethodError)
这是代码的响应
Headers: {"accept-ranges"=>["bytes"], "cache-control"=>["max-age=604800"], "content-type"=>["text/html"], "date"=>["Sun, 07 Jun 2015 21:33:34 GMT"], "etag"=>["\"359670651\""], "expires"=>["Sun, 14 Jun 2015 21:33:34 GMT"], "last-modified"=>["Fri, 09 Aug 2013 23:54:35 GMT"], "server"=>["ECS (iad/18F0)"], "x-cache"=>["HIT"], "x-ec-custom-error"=>["1"], "content-length"=>["1270"]}
200
OK
Net::HTTPOK
netHTTP.rb:18:in `<main>': undefined method `response_body_permitted?' for #<Net::HTTPOK 200 OK readbody=true> (NoMethodError)
我的安装有问题吗?
查看 Ruby 2.1.x(和 2.2.0)的 source and docs,您需要的方法是 body_permitted?
所以尝试使用 res.body_permitted?
.
您可以在 GitHub 上搜索旧版本 Ruby 的源代码,方法是参考它们的不同标签。很确定 net/http
中没有 response_body_permitted?
.
这样的方法
更新
我可以看出 body_permitted?
上的文档在说
时可能有点误导
true if the response has a body.
首先body_permitted?
是一个class方法。所以正确的使用方法是做类似的事情:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> res.class.body_permitted?
=> true
其次,body_permitted?
并没有告诉您您的特定响应实例是否有正文。相反,它会告诉您您的响应的 class 是否 允许 拥有正文。 运行 irb 中的这些代码将产生:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> Net::HTTPInformation.body_permitted?
=> false
查看 HTTPOK and HTTPInformation 的来源证实了我们的观察,即 body_permitted?
告诉我们每个响应中是否允许 body class。
如果你想检查你的响应是否有正文,只需执行 res.body.nil?
。所以像:
puts res.body if res.class.body_permitted? && !res.body.nil?
我正在浏览 ruby 的 Net::HTTP class。每次我 运行 这个代码来自 Net::HTTP doc
#!/usr/bin/ruby
require 'net/http'
uri = URI('http://example.com/index.html')
res = Net::HTTP.get_response(uri)
# Headers
res['Set-Cookie'] # => String
res.get_fields('set-cookie') # => Array
res.to_hash['set-cookie'] # => Array
puts "Headers: #{res.to_hash.inspect}"
# Status
puts res.code # => '200'
puts res.message # => 'OK'
puts res.class.name # => 'HTTPOK'
# Body
puts res.body if res.response_body_permitted?
我收到这个错误
netHTTP.rb:18:in `<main>': undefined method `response_body_permitted?' for #<Net::HTTPOK 200 OK readbody=true> (NoMethodError)
这是代码的响应
Headers: {"accept-ranges"=>["bytes"], "cache-control"=>["max-age=604800"], "content-type"=>["text/html"], "date"=>["Sun, 07 Jun 2015 21:33:34 GMT"], "etag"=>["\"359670651\""], "expires"=>["Sun, 14 Jun 2015 21:33:34 GMT"], "last-modified"=>["Fri, 09 Aug 2013 23:54:35 GMT"], "server"=>["ECS (iad/18F0)"], "x-cache"=>["HIT"], "x-ec-custom-error"=>["1"], "content-length"=>["1270"]}
200
OK
Net::HTTPOK
netHTTP.rb:18:in `<main>': undefined method `response_body_permitted?' for #<Net::HTTPOK 200 OK readbody=true> (NoMethodError)
我的安装有问题吗?
查看 Ruby 2.1.x(和 2.2.0)的 source and docs,您需要的方法是 body_permitted?
所以尝试使用 res.body_permitted?
.
您可以在 GitHub 上搜索旧版本 Ruby 的源代码,方法是参考它们的不同标签。很确定 net/http
中没有 response_body_permitted?
.
更新
我可以看出 body_permitted?
上的文档在说
true if the response has a body.
首先body_permitted?
是一个class方法。所以正确的使用方法是做类似的事情:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> res.class.body_permitted?
=> true
其次,body_permitted?
并没有告诉您您的特定响应实例是否有正文。相反,它会告诉您您的响应的 class 是否 允许 拥有正文。 运行 irb 中的这些代码将产生:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> Net::HTTPInformation.body_permitted?
=> false
查看 HTTPOK and HTTPInformation 的来源证实了我们的观察,即 body_permitted?
告诉我们每个响应中是否允许 body class。
如果你想检查你的响应是否有正文,只需执行 res.body.nil?
。所以像:
puts res.body if res.class.body_permitted? && !res.body.nil?