8

如何使用Network.Waiand从 POST 请求中检索数据Warp

比如说,我有一个简单的网页

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

当用户点击提交时,我该如何检索这些数据?我知道如何获取 GET 数据(queryString

例如

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?
4

2 回答 2

11

只是添加到 hammar 的答案: wai 包本身只定义了接口,它不提供任何帮助函数。您正在寻找的是wai-extra包,特别是parseRequestBody. 请注意,这允许您准确控制上传文件的存储方式,例如在临时文件或内存中。

于 2011-09-15T02:20:51.507 回答
8

WAI 是一个相当低级的接口,因此 POST 数据在请求正文中未处理,就像收到它一样。您应该能够使用该requestBody功能抓住它。

当然,您将不得不解析它,因为它通常以application/x-www-form-urlencoded格式编码(或multipart/form-data用于带有文件上传的表单)。我怀疑在某个地方可能有这个辅助函数,但我至少在 WAI 包本身中找不到任何辅助函数。

于 2011-09-14T21:22:26.250 回答