Как получить доступ к заголовкам запросов только в приложении rails 2? - PullRequest
3 голосов
/ 28 февраля 2010

Rails предоставляет метод request.headers, который возвращает все заголовки и много дополнительной информации без заголовка ... я хотел бы получить доступ только к заголовкам запроса, как мне это сделать?

Привет

1 Ответ

5 голосов
/ 28 февраля 2010

В сущности, вам необходимо изолировать все записи среды , для которых задан префикс HTTP_ или CONTENT_, которые соответствуют вашим заголовкам HTTP, например:

# CONTENT_LENGTH -> Content-Length
# HTTP_COOKIE -> Cookie
# HTTP_USER_AGENT -> User-Agent
@headers |= request.env.inject({}) { |h, (k, v)|
  if k =~ /^(HTTP|CONTENT)_/ then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

В качестве альтернативыможет быть более строгим и искать только определенные HTTP-заголовки , чтобы избежать случайного выбора переменных среды, которые могут выглядеть как заголовки, но на самом деле не действительны, такие как CONTENT_BLA или HTTP_DUMMY.

@headers |= %w[ CONTENT_LENGTH CONTENT_TYPE HTTP_ACCEPT
HTTP_REFERER HTTP_USER_AGENT ].inject({}) { |h, k|
  if v = request.env[k] then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

Посмотрите на actionpack/lib/action_controller/request.rb, чтобы увидеть, как они комбинируют среду для извлечения заголовков запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...