2011-09-14 3 views
7

Network.WaiWarp을 사용하여 POST 요청에서 데이터를 검색하는 방법은 무엇입니까?Warp/WAI를 사용하여 POST 처리

말 예를 들어, 나는이 데이터를 검색하는 방법을 간단한 웹 페이지를 사용자가 클릭 제출

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

을 GET 얻는 방법을 알고있다. requestBody 기능을 사용하여 잡을 수 있어야합니다.

일반적으로 application/x-www-form-urlencoded 형식 (또는 파일 업로드 형식의 경우 multipart/form-data)으로 인코딩되므로 구문 분석을 수행해야합니다. 나는 어딘가에 도우미 기능이있을 것으로 생각하지만, 적어도 WAI 패키지 자체에서는 아무 것도 찾을 수 없었다.

관련 문제