Sinatra 访问请求对象
传入的请求对象可以在请求层(过滤器,路由,错误处理)通过 request 方法被访问:
# 在 http://example.com/example 上运行的应用
get '/foo' do
request.body # 被客户端设定的请求体(见下)
request.scheme # "http"
request.script_name # "/example"
request.path_info # "/foo"
request.port # 80
request.request_method # "GET"
request.query_string # ""
request.content_length # request.body的长度
request.media_type # request.body的媒体类型
request.host # "example.com"
request.get? # true (其他动词也具有类似方法)
request.form_data? # false
request["SOME_HEADER"] # SOME_HEADER header的值
request.referrer # 客户端的referrer 或者 '/'
request.user_agent # user agent (被 :agent 条件使用)
request.cookies # 浏览器 cookies 哈希
request.xhr? # 这是否是ajax请求?ajax请求不需要返回
request.url # "http://example.com/example/foo"
request.path # "/example/foo"
request.ip # 客户端IP地址
request.secure? # false(如果是ssl则为true)
request.forwarded? # true (如果是运行在反向代理之后)
request.env # Rack中使用的未处理的env哈希
end
一些选项,例如 script_name
或者 path_info
也是可写的:
before { request.path_info = "/" }
get "/" do
"all requests end up here"
end
request.body 是一个IO或者StringIO对象:
post "/api" do
request.body.rewind # 如果已经有人读了它
data = JSON.parse request.body.read
"Hello #{data['name']}!"
end