2011-09-14 17 views
7

W jaki sposób odzyskujesz dane z żądania POST, używając Network.Wai i Warp?Obsługa testu POST przy użyciu Warp/WAI

powiedzieć na przykład, mam prostą stronę

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

Gdy użytkownik kliknie przedstawienia, w jaki sposób mogę odzyskać te dane? Wiem jak zdobyć GET dane (queryString)

np

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? 

Odpowiedz

10

Wystarczy dodać do odpowiedzi hammara: pakiet wai sam definiuje interfejs, nie zapewnia żadnych funkcji pomocnika. To, czego szukasz, to pakiet wai-extra, w szczególności parseRequestBody. Zwróć uwagę, że pozwala to dokładnie kontrolować sposób przechowywania przesłanych plików, na przykład w plikach tymczasowych lub w pamięci.

+0

Również http://langnostic.blogspot.de/2013/04/simple-web-chat-using-haskells-waiwarp.html stanowi doskonały przykład wykorzystania 'parseRequestBody'. Dokumentacja 'wai-extra' jest trochę kłopotliwa, jeśli chodzi o ustawienie argumentu typu' Sink x y' right. – eugenk

7

WAI jest dość niski poziom interfejsu, więc dane POST jest pozostawiony w stanie nieprzetworzonym do treści żądania, tak jak to zostało odebrane. Powinieneś być w stanie go pobrać za pomocą funkcji requestBody.

Oczywiście trzeba będzie je przeanalizować, ponieważ jest zwykle kodowany w formacie application/x-www-form-urlencoded (lub multipart/form-data dla formularza z przesyłaniem pliku). Podejrzewam, że gdzieś tam są funkcje pomocnicze, ale nie mogłem znaleźć żadnego w samym pakiecie WAI.

Powiązane problemy