我正在浏览ruby的Net :: HTTP类。每次我从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)
我的安装有问题吗?
答案 0 :(得分:3)
查看Ruby 2.1.x(和2.2.0)的source和docs,您需要的方法是body_permitted?
所以请尝试使用res.body_permitted?
。< / p>
您可以通过参考不同的标签在GitHub上搜索旧版Ruby的来源。很确定net/http
response_body_permitted?
中没有这样的方法。
更新
我可以看到body_permitted?
上的文档在说出时有点误导,
如果响应有正文,则为true。
首先,body_permitted?
是一种类方法。所以使用它的正确方法是做类似的事情:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> res.class.body_permitted?
=> true
其次,body_permitted?
并不告诉您特定的响应实例是否有正文。相反,它会告诉您答案的类别是否允许拥有正文。在irb中运行这些代码将产生:
irb(main)> Net::HTTPOK.body_permitted?
=> true
irb(main)> Net::HTTPInformation.body_permitted?
=> false
查看HTTPOK和HTTPInformation的来源,证实了我们的观察结果body_permitted?
告诉我们每个响应类中是否允许正文。
如果您想检查您的回复是否有正文,请执行res.body.nil?
。如下所示:
puts res.body if res.class.body_permitted? && !res.body.nil?