2

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

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

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

提前致谢。

4

3 回答 3

2

我还觉得很奇怪,Yaws API 中的非 POST HTTP 方法没有等效的 parse_post/1。

无论如何,我只是将 parse_query/1 用于 PUT。给定一个带有 param1=abc, param2=def 的 PUT 请求:

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 控制器中。)

于 2011-03-28T08:16:41.040 回答
2

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

<server ...>
        dav = true
</server>
于 2011-07-21T13:11:32.657 回答
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 一样解析它来工作。

这假设正文像 POST 一样被 urlencoded。

于 2013-02-22T15:35:01.357 回答