2014-11-13 17 views
5

Próbuję uzyskać nagłówki żądań w ich oryginalnym formacie z Rack za pomocą Ruby, ale nie udało mi się tego jeszcze rozgryźć. Hash, który otrzymuję z request.env, nie jest tym, czego chcę. W tym hash, klawisze nagłówkowe są upcased i mieć podkreślenia zamiast kresek, tak:Jak mogę uzyskać nagłówki żądań w ich oryginalnym formacie z Rack?

"CONTENT_TYPE" => "application/json; charset = UTF-8"

Co chcę to nagłówki przed oni są przetwarzane, szukam:

"content_type" => "application/json; charset = UTF-8"

mogę dość łatwo pętli request.env szuka nagłówków, które zaczynają się HTTP_ i rozdzielaj je, zamień na wielkie litery każdego słowa i gsub, aby zastąpić podkreślenia myślnikami, aby wprowadzić je do żądanego formatu. Staje się to trudniejsze, aby zachować oryginalny format ten sposób gdy mamy do czynienia z nagłówkami takimi jak:

„X-BT-RequestId”

czuję, że powinienem być w stanie dostać się na wstępnie przetworzonych nagłówków jakoś.

Piszę odbiornik HTTP, który otoczy żądanie i przekazuje je do innej usługi i chcę zachować nagłówki w ich oryginalnym formacie. Wiem, że nagłówki mają być niewrażliwe na wielkość liter, ale jeśli mogę je przesłać w ich oryginalnym formacie, mam nadzieję, że zapobiegnę problemom z rozróżnianiem wielkości liter w późniejszym czasie, gdy użytkownicy moich baz danych będą sprawdzać wartości oparte na tych nagłówkach.

Wszelkie pomysły?

+0

Czy możesz napisać oprogramowanie pośredniczące typu Rack, aby rozwiązać ten problem? Byłby to najprostszy sposób wykorzystania danych zlecenia przed jakimkolwiek wstępnym przetwarzaniem. – etagwerker

Odpowiedz

0

Można dostać surowe nagłówki w webrick/httpserver.rb z raw_header instancji zmiennej WEBrick :: HTTPRequest:

p req.instance_variable_get("@raw_header") 
si.service(req, res) 

Można również uzyskać je od wewnątrz service method w handler/webrick.rb.

Powiązane problemy