我刚开始与Yaws合作尝试创建一些简单的RESTful Web服务,但是我遇到了一个意想不到的问题:当我执行PUT请求时,我似乎无法访问我的数据。当我尝试使用yaws_api:parse_post函数时,我收到以下错误:
ERROR: Can't parse post body for 'PUT' requests: URL: ...
我写出了整个请求,一切看起来都一样,所以我很困惑。难道我做错了什么? GET和POST正常工作。事实上,我现在处理POST和PUT的唯一区别就是我现在为每个人显示的内容,我现在只是编写测试代码以显示成功。
提前致谢。
答案 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一样。