8

Network.Waiandを使用して POST リクエストからデータを取得するにはどうすればよいですWarpか?

たとえば、単純な Web ページがあるとします。

....
<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 に答える