2015-09-04 18 views
8

में HTTP शीर्षलेख विशेषताओं को प्रदर्शित या प्राप्त करें मेरे पास रेल में विकसित एक एप्लिकेशन है और मैं HTTP शीर्षलेख में विशेषताओं को देखने का प्रयास कर रहा हूं।रेल 4

क्या इन विशेषताओं को पढ़ने का कोई तरीका है? वे कहाँ संग्रहित हैं?

किसी ने request.headers का उल्लेख किया है। क्या ये सही है? मैं इस सरणी के अंदर कोई विशेषताओं को देखने में सक्षम नहीं हूं।

उत्तर

5

इस कोड को मेरे सवाल request.env["HTTP_MY_HEADER"] हल किया जाएगा। चाल यह थी कि मुझे HTTP

+0

यह 'अनुरोध की तरह दिखता है।शीर्षलेख ['HTTP_MY_HEADER'] 'भी काम करेगा। – 23inhouse

24

request.headers एक हैश वापस नहीं करता है, लेकिन ActionDispatch::Http::Headers का एक उदाहरण है, जो रैक एनवी के आसपास एक रैपर है।

ActionDispatch::Http::Headers[] और []= जो इसे एक हैश की तरह व्यवहार कर जैसे कई तरीकों को लागू करता है, लेकिन यह डिफ़ॉल्ट inspect पर हावी नहीं होता, इसलिए तुम सिर्फ p या यह pp द्वारा कुंजी-मान जोड़ों नहीं देख सकता।

हालांकि, आप अनुरोध हेडर रैक env में देख सकते हैं:

pp request.headers.env.select{|k, _| k =~ /^HTTP_/} 

याद रखें कि रैक env में अनुरोध हेडर हैं upcase घ, underscore घ और मूल http अनुरोध हेडर की HTTP_ उपसर्ग के संस्करण ।

अद्यतन

असल में वहाँ अनुरोध हेडर कि HTTP_ पहले से जुड़ा हुआ नहीं कर रहे हैं की एक परिमित सेट कर रहे हैं। ये (पूंजीकृत और अंडरस्कोर) शीर्षलेख नाम ActionDispatch::Http::Headers::CGI_VARIABLES में संग्रहीत हैं। मैं उन्हें नीचे की सूची:

AUTH_TYPE 
    CONTENT_LENGTH 
    CONTENT_TYPE 
    GATEWAY_INTERFACE 
    HTTPS 
    PATH_INFO 
    PATH_TRANSLATED 
    QUERY_STRING 
    REMOTE_ADDR 
    REMOTE_HOST 
    REMOTE_IDENT 
    REMOTE_USER 
    REQUEST_METHOD 
    SCRIPT_NAME 
    SERVER_NAME 
    SERVER_PORT 
    SERVER_PROTOCOL 
    SERVER_SOFTWARE 

तो लिस्टिंग अनुरोध हेडर के पूर्ण संस्करण

pp request.headers.env.select{|k, _| k.in?(ActionDispatch::Http::Headers::CGI_VARIABLES) || k =~ /^HTTP_/} 
+0

अच्छा जवाब। चलिए देखते हैं कि क्या आपको 1000rep पर बम है :) –

+1

मैं थोड़ी उलझन में हूं, क्योंकि मैं 'HTTP' के साथ उपसर्ग किए गए सभी गुणों को प्राप्त करता रहता हूं, मैं इसे 'प्रतिक्रिया [' कैश-कंट्रोल 'जैसी कुछ चीज़ों के साथ क्यों नहीं एक्सेस कर सकता हूं] ' – delpha

+2

@ user3433309 आप अनुरोध अनुरोध शीर्षकों जैसे 'request.headers [' प्रमाणीकरण ']' तक पहुंच सकते हैं। इस कारण से रेल रैक एनवी लपेटती है। आप 'एक्शनडिस्चैच :: एचटीपी :: हेडर' के स्रोत कोड पर एक नज़र डाल सकते हैं, यह बहुत आसान है। – Aetherus

-1

के साथ मेरे शीर्षलेख का नाम उपसर्ग करना पड़ा था, आप @_headers नियंत्रक में वास्तविक http शीर्षलेखों का हैश देख सकते हैं।

3

मैं रेल 5 में देखा है वे अब उम्मीद हेडर अनुरोध में इस तरह की वर्तनी के लिए:

HTTP_ACCESS_TOKEN

रेल में:

Access-Token

वे के रूप में तब्दील कर रहे हैं इससे पहले कि । ACCESS_TOKEN करना अब काम नहीं करेगा।