2015-02-26 8 views
17

Ich weiß, wie einen Header in Rails zugreifenDrucken Sie nur Header in Rails anfordern

request.headers["HEADER_NAME"] 

Allerdings möchte ich alle Header von einem Browser übergeben bekommen. Ich sehe, dass ich es jedoch

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

aufzählen kann, diese beiden ausspucken werden Header und andere Umgebungsvariablen. Gibt es eine Möglichkeit, nur Header zu bekommen?

aktualisieren 1

ist mein Problem nicht interation. Mein Problem unterscheidet zwischen Umgebungsvariablen und Kopfzeilen. Beide werden während der Interaktion mit jedem oder Tasten gemeldet.

+0

die aktuelle Liste der Antworten aller scheint die Frage verstanden mis zu .. mir auch ähnliche Notwendigkeit begegnet ist, und nicht genau wissen, wie es zu lösen noch .. – songyy

+0

In express.js erhalten Sie die gesamte Anfrage als ein Objekt. Ist es in Ruby auf Schienen ähnlich? –

Antwort

0

sollten Sie in der Lage sein

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

Im Allgemeinen zu tun, wenn über einen Hash-Rubin Iterieren schaut auf die arity des Blocks und gibt Ihnen entweder ein Paar (Schlüssel + Wert) oder getrennte Variablen. (Der Hash in diesem Fall ist ein Objekt intern die Header-Objekt)

+1

Mein Problem ist keine Interaktion. Mein Problem unterscheidet zwischen Umgebungsvariablen und Kopfzeilen. Beide werden während der Interaktion mit jedem oder Tasten gemeldet. –

+0

request.headers reagiert nicht auf eine Schlüsselmethode. Es ist eine Instanz von ActionDispatch :: Http :: Headers –

+0

Richtig du bist - danke. –

7

von

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

Verwendung Dies wird Ihr Wunsch-Header mit (Taste + Wert) iteriert, aber wenn Sie bestimmte Werte wollen Sie müssen Verwenden Sie den Schlüsselnamen wie zum Beispiel HTTP_KEYNAME, denn wenn eine HTTP-Anforderung kommt, wird HTTP an Schlüssel angefügt und Sie müssen sicherstellen, dass Groß- und Kleinschreibung beachtet wird.

zum Beispiel:

wenn wir auth_token als Header-Anforderungsparameter und wollen Zugang bestanden haben, können wir diese verwenden.

request.headers["HTTP_AUTH_TOKEN"] 
2

Sie können versuchen, diese von der Anfrage nur Header-Liste zu erhalten

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

Es wird request.headers in Array-Objekt konvertiert und dann mit Hash-Liste aller Schlüssel in Anforderung verwendet werden, um zu erhalten, wie

request.headers["keyname"] 

Es könnte nicht sehr effizient sein, aber ich denke, es kann die Arbeit machen.

Hoffe, das hilft.

4

nicht sicher, ob dies irgendwelche hilfreich ist, aber ich am Ende mit dieser Brute-Force-Ansatz

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

Sie könnten wahrscheinlich suchen:

request.env 

Dies wird grundsätzlich ein Ruby-Hash-Wert des erstellen ganzes Anfrageobjekt

Für weitere Informationen, lesen Sie diese Frage: How do I see the whole HTTP request in Rails

Verwandte Themen