Обработка POST с использованием Warp / WAI - PullRequest
7 голосов
/ 15 сентября 2011

Как вы получаете данные из запроса POST, используя 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?

Ответы [ 2 ]

10 голосов
/ 15 сентября 2011

Просто добавим к ответу Hammar: сам пакет wai просто определяет интерфейс, он не предоставляет никаких вспомогательных функций.То, что вы ищете, это пакет wai-extra, в частности parseRequestBody.Обратите внимание, что это позволяет точно контролировать, как загруженные файлы хранятся, например, во временных файлах или в памяти.

7 голосов
/ 15 сентября 2011

WAI - интерфейс довольно низкого уровня, поэтому данные POST остаются необработанными в теле запроса, так же, как они были получены. Вы должны быть в состоянии захватить его, используя функцию requestBody.

Конечно, вам придется проанализировать его, так как он обычно закодирован в формате application/x-www-form-urlencoded (или multipart/form-data для формы с загрузкой файла). Я подозреваю, что где-то здесь могут быть вспомогательные функции, но я не смог найти ни одной в самом пакете WAI, по крайней мере.

...