2011-09-14 8 views
7

का उपयोग कर पोस्ट को संभालने से आप Network.Wai और Warp का उपयोग करके POST अनुरोध से डेटा कैसे प्राप्त कर सकते हैं?वार्प/वाईएआई

उदाहरण के लिए कहो, मैं मैं इस डेटा कैसे प्राप्त कर सकते हैं एक सरल वेबपेज

.... 
<form method="POST" action="/handlepost"> 
    <input name="name" type="text" /> 
    <input type="submit" /> 
</form> 
.... 

जब उपयोगकर्ता क्लिक सबमिट करते हैं, है? मैं कैसे उदाहरण

app :: Application 
app request = case rawPathInfo request of 
        "/" -> return $ displayForm 
        "/handlePost" -> return $ handlepost 
        _ -> return $ notFound 

displayForm :: Response 
displayForm = ResponseBuilder 
    status200 
    [("Content-Type", "text/html")] $ 
    fromByteString "<form method='POST' action='/handlepost'><input name="name" type="text" /><input type='submit'></form>" 

handlePost :: Request -> Response 
handlePost req = undefined -- how do I examine the contents of POST? 

उत्तर

10

बस हथौड़ा के उत्तर में जोड़ने के लिए: वाई पैकेज स्वयं इंटरफ़ेस को परिभाषित करता है, यह कोई सहायक कार्य प्रदान नहीं करता है। आप जो खोज रहे हैं वह wai-extra पैकेज है, विशेष रूप से parseRequestBody पर। ध्यान दें कि यह आपको नियंत्रित करने की अनुमति देता है कि अपलोड की गई फ़ाइलों को कैसे संग्रहीत किया जाता है, जैसे कि अस्थायी फ़ाइलों या स्मृति में।

+0

इसके अलावा http://langnostic.blogspot.de/2013/04/simple-web-chat-using-haskells-waiwarp.html 'parseRequestBody' का उपयोग कैसे किया जा सकता है इस पर एक महान उदाहरण प्रदान करता है। जब 'सिंक एक्स वाई' दाएं प्रकार के तर्क को सेट करने की बात आती है तो' वाई-अतिरिक्त 'दस्तावेज थोड़ा बोझिल होता है। – eugenk

7

के लिए डेटा (queryString)

प्राप्त WAI, काफी कम स्तर इंटरफ़ेस है, तो पोस्ट डेटा अनुरोध शरीर में असंसाधित छोड़ दिया है पाने के लिए पता है, बस के रूप में इसे प्राप्त किया गया था। आपको requestBody फ़ंक्शन का उपयोग करके इसे पकड़ने में सक्षम होना चाहिए।

बेशक, आपको इसे पार्स करना होगा, क्योंकि इसे आमतौर पर application/x-www-form-urlencoded प्रारूप (या multipart/form-data फ़ाइल अपलोड के साथ फ़ॉर्म में एन्कोड किया गया है) में एन्कोड किया गया है। मुझे संदेह है कि इस जगह के लिए सहायक कार्य हो सकते हैं, लेकिन कम से कम WAI पैकेज में मुझे कोई भी नहीं मिला।