2015-02-26 47 views
17

Tôi biết làm thế nào để truy cập vào một tiêu đề trong RailsIn ra chỉ tiêu đề trong Rails yêu cầu

request.headers["HEADER_NAME"] 

Tuy nhiên, tôi muốn để có được tất cả các tiêu đề thông qua một trình duyệt. Tôi thấy rằng tôi có thể liệt kê nó

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

Tuy nhiên, điều này sẽ nhổ ra cả hai tiêu đề và các biến môi trường khác. Có cách nào để chỉ lấy tiêu đề không?

Cập nhật 1

Vấn đề của tôi không phải là interation. Vấn đề của tôi là phân biệt giữa các biến môi trường và các tiêu đề. Cả hai người trong số họ sẽ được báo cáo trong khi interation sử dụng mỗi hoặc phím.

+0

danh sách hiện tại của câu trả lời tất cả dường như mis-hiểu câu hỏi .. Tôi cũng đã gặp phải nhu cầu tương tự, và không biết chính xác làm thế nào để giải quyết nó nhưng .. – songyy

+0

Trong express.js bạn nhận được toàn bộ yêu cầu làm đối tượng. Có tương tự trong Ruby trên đường ray? –

Trả lời

0

Bạn sẽ có thể làm

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

Nói chung khi iterating trên một ruby ​​băm nhìn vào arity khối của bạn và cung cấp cho bạn hoặc là một cặp (key giá trị +) hoặc các biến riêng biệt. (The băm trong trường hợp này là một đối tượng bên trong để phản đối các tiêu đề)

+1

Vấn đề của tôi không phải là tương tác. Vấn đề của tôi là phân biệt giữa các biến môi trường và các tiêu đề. Cả hai người trong số họ sẽ được báo cáo trong khi interation sử dụng mỗi hoặc phím. –

+0

request.headers không phản hồi phương thức phím. Đó là một ví dụ của ActionDispatch :: Http :: Tiêu đề –

+0

Đúng vậy - cảm ơn. –

7

Bằng cách sử dụng

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

này được lặp lại tiêu đề yêu cầu của bạn với (giá trị + key), nhưng nếu bạn muốn giá trị cụ thể mà bạn phải sử dụng tên khóa như, HTTP_KEYNAME vì bất kỳ khi nào yêu cầu HTTP đến, nó sẽ thêm HTTP vào khóa và đảm bảo chữ hoa vì nó phân biệt chữ hoa chữ thường.

ví dụ:

nếu chúng ta đã trôi qua auth_token như request parameter header và muốn truy cập, chúng ta có thể sử dụng này.

request.headers["HTTP_AUTH_TOKEN"] 
2

Bạn có thể thử này để có được chỉ tiêu đề danh sách từ yêu cầu

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

Nó sẽ chuyển đổi request.headers đối tượng vào mảng và sau đó băm để có được danh sách của tất cả các phím trong yêu cầu được sử dụng như

request.headers["keyname"] 

Nó có thể không hiệu quả lắm nhưng tôi nghĩ nó có thể thực hiện công việc.

Hy vọng điều này sẽ hữu ích.

4

không chắc chắn nếu điều này là bất kỳ hữu ích nhưng tôi đã kết thúc sử dụng này phương pháp brute force

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

Bạn có thể có thể tìm kiếm

request.env 

này về cơ bản sẽ tạo ra một Ruby Hash của toàn bộ đối tượng yêu cầu.

Để biết thêm chi tiết, kiểm tra câu hỏi này: How do I see the whole HTTP request in Rails

Các vấn đề liên quan