雅司和PUT请求

时间:2010-10-14 13:25:07

标签: rest yaws

我刚开始与Yaws合作尝试创建一些简单的RESTful Web服务,但是我遇到了一个意想不到的问题:当我执行PUT请求时,我似乎无法访问我的数据。当我尝试使用yaws_api:parse_post函数时,我收到以下错误:

ERROR: Can't parse post body for 'PUT' requests: URL: ...

我写出了整个请求,一切看起来都一样,所以我很困惑。难道我做错了什么? GET和POST正常工作。事实上,我现在处理POST和PUT的唯一区别就是我现在为每个人显示的内容,我现在只是编写测试代码以显示成功。

提前致谢。

3 个答案:

答案 0 :(得分:2)

我也觉得奇怪的是,Yaws API中的非POST HTTP方法没有等效的parse_post / 1.

无论如何,我只是使用parse_query / 1作为PUT。给定param1 = abc的PUT请求,param2 = def:

index(Args) ->
  case yaws_arg:method(Args) of
  'PUT' ->
    Parsed = yaws_api:parse_query(Args),
    io:format("PUT PARAMS=~p", [Parsed]),
    ....
  'POST' ->
    ....

输出是:

PUT PARAMS=[{"param1","abc"}, {"param2","def"}}]

(以上示例位于Erlyweb控制器中。)

答案 1 :(得分:2)

您应该将文件“yaws.conf”中的参数“dav = true”添加(或更改)到<server>部分,如下所示:

<server ...>
        dav = true
</server>

答案 2 :(得分:1)

PUT的数据位于#arg.clidata中,就像用于POST一样。在内部,对parse_query和parse_post的调用最终使用相同的函数来解析GET和POST。

因此,解决身体中PUT参数的问题

Parsed = yaws_api:parse_query( Arg#arg{ querydata = Arg#arg.clidata } ),

它的工作原理是将clidata字段(正文中的数据)复制到querydata字段并像GET一样解析它。

这假设身体是一个urlencoded,就像POST一样。