2012-09-25 9 views
5

प्ले फ्रेमवर्क 2.0.3 (स्कैला) में, आप किसी भी अनुरोध के आकार (बाइट्स) को कैसे निर्धारित करते हैं [_]?आप Play 2.0.x में किसी अनुरोध का आकार कैसे प्राप्त करते हैं?

हम लॉगिंग उद्देश्यों के लिए यह जानकारी प्राप्त करने का प्रयास कर रहे हैं।

हम request.body.asRaw से कुछ मूल्य उम्मीद होती है, लेकिन हम हमेशा प्राप्त कोई नहीं:

def logRawRequest[A](request: Request[A]) { 
    request.body match { 
    case c: AnyContent => println("Raw: "+c.asRaw) 
    } 
} 

वहाँ कुछ सरल है कि हम भूल रहे हैं, सही होना चाहिए?


उपयोगी उत्तर के लिए धन्यवाद! ऐसा लगता है कि सामग्री-लंबाई हेडर केवल पोस्ट/PUT के लिए मौजूद है, तो हम उन लोगों के लिए इसका इस्तेमाल करते हैं, और प्राप्त करने के लिए क्वेरी की लंबाई पर वापस आने/हटाएँ, इस तरह:

val requestSize = request.method match { 
    case "POST" | "PUT" => request.headers.get(CONTENT_LENGTH).map(_.toInt).getOrElse(-1) 
    case _ => request.toString().length 
} 

उत्तर

3

मैं हेवन ' टी ने कोशिश की, लेकिन शायद

request.headers.get(play.api.http.HeaderNames.CONTENT_LENGTH) 

चाल चलाना होगा? यह कम से कम POST अनुरोधों के लिए काम करेगा। यह सिर्फ शरीर की लंबाई दे देगा।

जीईटी अनुरोधों में स्रोत का कोई शरीर नहीं है - जो आप मापना चाहते हैं उसके आधार पर request.uri.length इसे करना चाहिए, और हो सकता है कि हेडर का कुल आकार भी हो (कुछ बड़ी कुकीज़ हो सकती हैं)। यदि आप इस कुल की गणना करते हैं, तो आपको इसे POST के लिए सामग्री की लंबाई में जोड़ना चाहिए।

+0

धन्यवाद रिचर्ड, हमने POST/PUT अनुरोधों के लिए सामग्री-लंबाई शीर्षलेख का उपयोग करके समाप्त किया – Ash

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