2015-02-26 9 views
17

wiem, jak uzyskać dostęp do nagłówka w Railswydrukować tylko nagłówki w szynach zażądać

request.headers["HEADER_NAME"] 

Jednakże chcę, aby wszystkie nagłówki przekazywane przez przeglądarkę. Rozumiem, że mogę wymienić to

request.headers.each { |header| ... } 

Jednak będzie to wypluć zarówno nagłówki i inne zmienne środowiskowe. Czy istnieje sposób na zdobycie tylko nagłówków?

Update 1

Mój problem nie jest interation. Mój problem polega na rozróżnianiu zmiennych środowiskowych i nagłówków. Oba zostaną zgłoszone podczas interakcji przy użyciu każdego z kluczy.

+0

aktualna lista odpowiedzi wszystko zdaje się błędnie zrozumiał pytanie .. Ja również napotkał podobną potrzebę, a nie wiem dokładnie, jak go rozwiązać yet .. – songyy

+0

W express.js otrzymujesz całe żądanie jako obiekt. Czy jest podobny w Ruby na szynach? –

Odpowiedz

0

Powinieneś być w stanie zrobić

request.headers.each { |key, value| } 

Generalnie podczas iteracji nad rubinem hash patrzy na liczbę operandów swoim bloku i daje albo parę wartości klucza (+) lub osobne zmienne. (The hash w tym przypadku jest przedmiotem wewnętrznego nagłówki Object)

+1

Moim problemem nie jest interakcja. Mój problem polega na rozróżnianiu zmiennych środowiskowych i nagłówków. Oba zostaną zgłoszone podczas interakcji przy użyciu każdego z kluczy. –

+0

request.headers nie odpowiada na metodę kluczy. Jest to instancja ActionDispatch :: Http :: Headers –

+0

Dobrze, jesteś - dzięki. –

7

Korzystając

request.headers.each { |key, value| } 

to iteracja wybranym nagłówek z (wartość klucza +), ale jeśli chcesz konkretne wartości trzeba użyj nazwy klucza, np., NAZWA_HP_KEY, ponieważ gdy przyjdzie żądanie HTTP, doda HTTP do kluczy i upewnij się, że pisane są wielkie litery, ponieważ rozróżniane są wielkie i małe litery.

na przykład:

jeśli minęło auth_token jako nagłówka żądania parametru i chcesz uzyskać dostęp, możemy to wykorzystać.

request.headers["HTTP_AUTH_TOKEN"] 
2

Można spróbować dostać się tylko z listy nagłówków żądania

request.headers.first(50).to_h.keys 

To zamieni request.headers obiekt do tablicy, a następnie do mieszania do listy wszystkich kluczy życzenie dostać do wykorzystania jako

request.headers["keyname"] 

To może nie być zbyt wydajne, ale myślę, że może to zrobić.

Mam nadzieję, że to pomoże.

4

nie wiem, czy to jest jakaś pomocne, ale skończyło się na zastosowanie tej metody brute force

request.env.select {|k,v| 
    k.match("^HTTP.*|^CONTENT.*|^REMOTE.*|^REQUEST.*|^AUTHORIZATION.*|^SCRIPT.*|^SERVER.*") 
} 
Powiązane problemy