2013-09-27 7 views
16

में भेजे आईपी पते पाने के लिए मैं हेडर कि में आ रहे हैं पर देख रहा हूँ, लेकिन कोई आईपी वहाँ हो रहा है:कैसे स्प्रे ढांचे

HttpRequest(GET,http://127.0.0.1:8080/track/check,List(Accept-Language: uk-UA, 
uk, ru, en-US, en, Encoding: gzip, deflate, sdch, User-Agent: Mozilla/5.0 
(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29 
Safari/537.36, Accept: text/html, application/xhtml+xml, application/xml;q=0.9, 
*/*;q=0.8, Connection: keep-alive, Host: 127.0.0.1:8080),EmptyEntity,HTTP/1.1) 

यह एक अनुरोध मैं ब्राउज़र से किया। असल में मैं देख रहा हूं:

path("check") { 
     get { 
     implicit request => { 
      val a = 5 
     } 
     } 
    } ~ 

यहां अनुरोध ऑब्जेक्ट में आईपी पते के बारे में कोई जानकारी नहीं है। कोई भी मदद बहुत सराहनीय है। धन्यवाद।

उत्तर

15

आप स्प्रे मार्ग का उपयोग कर रहे हैं, तो clientIP कहा जाता है =) इसका इस्तेमाल करने के लिए ग्राहक आईपी निकालने के लिए एक निर्देश है बस लिखना:

(path("somepath") & get) { 
    clientIP { ip => 
    complete(s"ip is $ip") 
    } 
} 
तो सरल

अधिक, लेकिन आप अभी भी जरूरत है स्पष्ट जोड़ने की जरूरत अनुरोध से आईपी प्राप्त करने के लिए विन्यास। और एक छोटी टिप्पणी, शायद मुझे कुछ नहीं मिला लेकिन स्प्रे में कोई implicit request नहीं है। दरअसल आने वाले अनुरोध आपकी रूटिंग संरचना के माध्यम से घूमते हैं, यदि आप रूटिंग लाइब्रेरी में एक नज़र डालते हैं तो आप देखेंगे कि यह मार्ग सिर्फ एक उपनाम है: type Route = RequestContext => Unit। तो अगर आप कुछ बिंदु पर संदर्भ के लिए उपयोग प्राप्त करने की आवश्यकता सिर्फ लिखने:

लेकिन स्थिर मार्ग हिस्सा है और गतिशील हिस्से के बारे में याद है।

+2

यह एक अच्छा तरीका है, हालांकि नीचे मेरा जवाब भी बहुत प्रासंगिक है। यह वास्तव में मेरे लिए मुख्य समस्या थी। –

28

समस्या कॉन्फ़िगरेशन में थी, यह अच्छी तरह से प्रलेखित नहीं है। इस जोड़ना:

# spray-can config 
spray.can { 
    server { 
    remote-address-header = on 
    } 
} 

बलों मुख्य हेडर के लिए दूरदराज के IP हेडर जोड़ने के लिए स्प्रे। पता हेडर का नाम रिमोट-पता होगा।

+2

हां, आप सही हैं, वर्तमान में यह दस्तावेज है। एक बार जब हम क्लाइंट को दस्तावेज कर लेते हैं तो निर्देशक में यह बिल्कुल दस्तावेज होगा। क्षमा करें, आपको कठिन तरीके से पता लगाना था। – jrudolph

+0

@jrudolph क्या यह स्प्रे सर्वलेट के साथ काम करता है? – expert

+0

@ jrudolph अभी भी गायब है। http://spray.io/documentation/1.1.3/spray-routing/misc-directives/clientIP/#description 2 साल, कोई दबाव नहीं। – flavian

संबंधित मुद्दे