5

是否有内置方法可以获取 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))))

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

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

4

1 回答 1

3

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

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

一般来说,我建议使用 formlet 来处理表单及其值。

现在你的问题...

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

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

“或者更好的是,一种将 POST/GET 值的集合作为列表/散列/a-list 取回的方法?”

这就是 request-bindings/raw 所做的。是绑定列表吗?对象。由于多个值返回,将其转换为哈希是没有意义的。

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

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

周杰伦

于 2010-06-22T22:33:01.957 回答