2015-02-26 12 views
17

So come accedere a un colpo di testa in RailsStampa solo le intestazioni in Rails richiesta

request.headers["HEADER_NAME"] 

Tuttavia, voglio ottenere tutte le intestazioni passati da un browser. Vedo che posso enumerare che

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

Tuttavia, questo sarà sputare sia le intestazioni e le altre variabili d'ambiente. C'è un modo per ottenere solo le intestazioni?

Update 1

Il mio problema non è dell'interazione. Il mio problema è distinguere tra variabili di ambiente e intestazioni. Entrambe verranno segnalate durante l'interazione utilizzando ciascuno o i tasti.

+0

l'elenco corrente di risposte tutti sembra mis-capito la domanda .. Ho anche incontrato simile esigenza, e non so esattamente come risolverlo ancora .. – songyy

+0

In express.js si ottiene l'intera richiesta come oggetto. C'è qualcosa di simile in Ruby on rails? –

risposta

0

Si dovrebbe essere in grado di fare

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

In generale, quando l'iterazione di un rubino hash guarda alla arity del blocco e si dà sia una coppia (valore + chiave) o variabili separate. (L'hash in questo caso è un oggetto interno alle intestazioni oggetto)

+1

Il mio problema non è un'interazione. Il mio problema è distinguere tra variabili di ambiente e intestazioni. Entrambe verranno segnalate durante l'interazione utilizzando ciascuno o i tasti. –

+0

request.headers non risponde a un metodo di chiavi. È un'istanza di ActionDispatch :: Http :: Headers –

+0

Right you are - grazie. –

7

Utilizzando

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

Questa è iterazione l'intestazione richiesto con (valore + chiave), ma se si vuole valori specifici si deve usa il nome della chiave come, HTTP_KEYNAME perché ogni volta che viene richiesta HTTP aggiungerà HTTP alle chiavi e sii sicuro di lettere maiuscole perché è case sensitive.

ad esempio:

se abbiamo superato auth_token come parametro di richiesta di intestazione e desidera accedere, possiamo usare questo.

request.headers["HTTP_AUTH_TOKEN"] 
2

Si può provare questo per ottenere unica lista intestazioni di richiesta

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

Sarà convertire request.headers oggetto in una matrice e quindi di hash per ottenere l'elenco di tutte le chiavi di richiesta per essere utilizzato come

request.headers["keyname"] 

Potrebbe non essere molto efficiente ma penso che possa fare il lavoro.

Spero che questo aiuti.

4

non so se questo è un qualsiasi utile, ma ho finito per usare questo approccio forza bruta

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

Si potrebbe essere probabilmente alla ricerca di:

request.env 

Questo sarà essenzialmente creare un rubino Hash del intero oggetto di richiesta.

Per ulteriori dettagli, controllare questa domanda: How do I see the whole HTTP request in Rails

Problemi correlati