如何使用Network.Wai
和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?
答案 0 :(得分:10)
只是添加到hammar的答案:wai包本身只是定义了接口,它没有提供任何帮助函数。你要找的是wai-extra
包,特别是parseRequestBody
。请注意,这使您可以准确控制上载文件的存储方式,例如临时文件或内存中。
答案 1 :(得分:7)
WAI是一个相当低级别的接口,因此POST数据在请求正文中保持未处理状态,就像收到它一样。您应该能够使用requestBody
功能获取它。
当然,您必须解析它,因为它通常以application/x-www-form-urlencoded
格式编码(或multipart/form-data
用于包含文件上传的表单)。我怀疑这个地方可能有辅助功能,但至少在WAI包本身找不到任何功能。