【问题标题】:Handling POST using Warp/WAI使用 Warp/WAI 处理 POST
【发布时间】:2016-03-06 16:49:12
【问题描述】:

如何使用 Network.WaiWarp 从 POST 请求中检索数据?

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

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

【问题讨论】:

    标签: haskell haskell-warp


    【解决方案1】:

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

    【讨论】:

    • 另外langnostic.blogspot.de/2013/04/… 提供了一个很好的例子来说明如何使用parseRequestBodywai-extra 文档在设置 Sink x y 类型的参数时有点麻烦。
    【解决方案2】:

    WAI 是一个相当低级的接口,因此 POST 数据在请求正文中未处理,就像接收到的一样。您应该可以使用requestBody 函数获取它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多