我使用库rest_client来查询http服务器:
r = RestClient.get 'http://stackoverflow.com'
除非服务器返回错误代码,否则r
是带有http答案的字符串:
r # => I get the HTML, no HTTP headers, no HTTP status code
r.class # => "String"
正如文档指出的那样,r
响应以下方法:
r.code
r.headers
r.raw_header
其他http特定的东西。我怎样才能获得添加内容的证据?
答案 0 :(得分:1)
您可以看到方法是否已添加到实例中,您将其方法与其类的实例方法进行比较:
r.methods - r.class.instance_methods
# => [:args, :args, :body, :body, :net_http_res, :net_http_res, :code, :headers, :raw_headers, :cookies, :return!, :description, :follow_redirection]
str = 'a'
str.methods - str.class.instance_methods
# => []
答案 1 :(得分:1)
查看source code表明REST Client通过调用extend
向结果字符串添加方法:
def Response.create body, net_http_res, args
result = body || ''
result.extend Response
result.net_http_res = net_http_res
result.args = args
result
end
这会添加RestClient::Resonse
的实例方法和包含的RestClient::AbstractResponse
。
API文档:
顺便说一下,您始终可以使用Object#method
查找方法:
r = RestClient.get 'http://stackoverflow.com'
r.method(:code)
#=> #<Method: String(RestClient::AbstractResponse)#code>
r.method(:args)
#=> #<Method: String(RestClient::Response)#code>
require 'json'
r.method(:to_json)
#=> #<Method: String(JSON::Ext::Generator::GeneratorMethods::String)#to_json>