Sinatra 訪問(wèn)請(qǐng)求對(duì)象

2023-12-20 15:43 更新

傳入的請(qǐng)求對(duì)象可以在請(qǐng)求層(過(guò)濾器,路由,錯(cuò)誤處理)通過(guò) request 方法被訪問(wèn):

# 在 http://example.com/example 上運(yùn)行的應(yīng)用
get '/foo' do
  request.body              # 被客戶端設(shè)定的請(qǐng)求體(見下)
  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的長(zhǎng)度
  request.media_type        # request.body的媒體類型
  request.host              # "example.com"
  request.get?              # true (其他動(dòng)詞也具有類似方法)
  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請(qǐng)求?ajax請(qǐng)求不需要返回
  request.url               # "http://example.com/example/foo"
  request.path              # "/example/foo"
  request.ip                # 客戶端IP地址
  request.secure?           # false(如果是ssl則為true)
  request.forwarded?        # true (如果是運(yùn)行在反向代理之后)
  request.env               # Rack中使用的未處理的env哈希
end

一些選項(xiàng),例如 ?script_name? 或者 ?path_info? 也是可寫的:

before { request.path_info = "/" }

get "/" do
  "all requests end up here"
end

request.body 是一個(gè)IO或者StringIO對(duì)象:

post "/api" do
  request.body.rewind  # 如果已經(jīng)有人讀了它
  data = JSON.parse request.body.read
  "Hello #{data['name']}!"
end


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)