2011-09-14 6 views
7

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

言ってやる例えば、私は、このデータを取得することができますどのように簡単なWebページ、ユーザーがクリックを提出

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

を、持っていますか?私はそれを受信したと同じように、POSTデータがリクエストボディで未処理のままにされるようにWAIは、非常に低レベルのインタフェースである例

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? 

答えて

10

ちょうどhammarの答えに追加する:waiパッケージ自体がインターフェースを定義するだけで、ヘルパー機能は提供されません。あなたが探しているのはwai-extraパッケージ、特にparseRequestBodyです。これにより、アップロードされたファイルの保存方法(テンポラリファイルやメモリなど)を正確に制御できます。

+0

http://langnostic.blogspot.de/2013/04/simple-web-chat-using-haskells-waiwarp.htmlは、どのように 'parseRequestBody'を使用できるかについての素晴らしい例を提供しています。 'wai-extra'のドキュメントは、' Sink x y'型の引数を正しく設定するのは少し面倒です。 – eugenk

7

ためのデータ(queryString

をゲットする方法を知っています。あなたはrequestBody機能を使用してそれをつかむことができるはずです。

もちろん、application/x-www-form-urlencoded形式(またはファイルアップロードのあるフォームの場合はmultipart/form-data)にエンコードされているため、解析する必要があります。私はどこかでヘルパー機能があるかもしれないと思うが、少なくともWAIパッケージ自体は見つからなかった。

関連する問題