在Racket中POST / GET绑定

时间:2010-06-22 19:07:24

标签: racket http-request post-parameter

是否有内置的方法来获取Racket中的POST / GET参数? extract-binding和朋友按照我的意愿行事,但是关于与文件上传相关的潜在安全风险的结论是一个可怕的说明

  

因此,我们建议反对他们   使用,但它们是提供的   与旧代码兼容。

我能想到的最好的是(事先原谅我)

(bytes->string/utf-8 (binding:form-value (bindings-assq (string->bytes/utf-8 "[field_name_here]") (request-bindings/raw req))))

但这似乎不必要地复杂化(似乎它会受到Bindings部分中记录的一些相同错误的影响)。

在给定字段名称和请求的情况下,是否有一个或多或少的标准,无错误的方法来获取POST / GET变量的值?或者更好的是,将POST / GET值的集合作为列表/散列/列表返回的方法是什么?除了其中任何一个,是否有一个函数可以做同样的事情,但只有POST变量,忽略GET?

1 个答案:

答案 0 :(得分:3)

提取绑定很糟糕,因为它不区分大小写,对于多次返回的输入非常混乱,没有办法处理文件上传,并且自动假设所有内容都是UTF-8,这不是必然如此。如果您能接受这些问题,请随时使用。

您编写的代码段在数据为UTF-8且只有一个字段返回时有效。您可以定义它是一个函数并避免多次写入。

通常,我建议使用formlet来处理表单及其值。

现在你的问题......

“在给定字段名称和请求的情况下,是否有一个或多或少的标准,无错误的方法来获取POST / GET变量的值?”

你所拥有的是标准的东西,尽管你错误地认为只有一个值。当有多个时,您需要过滤字段名称上的绑定。同样,你不需要将值转换为字符串,你可以把它保留为字节就好了。

“或者更好的方法是,将POST / GET值的集合作为列表/散列/列表返回?”

这就是请求绑定/ raw所做的事情。这是绑定列表?对象。由于多次返回值,将其转换为哈希是没有意义的。

“除了其中任何一个,是否有一个函数可以做同样的事情,但只有POST变量,忽略GET?”

Web服务器隐藏了POST和GET之间的区别。您可以检查uri和原始帖子数据以恢复它们,但您必须自己解析它们。我不推荐它。