Ina*_*thi 5 post-parameter racket http-request
是否有内置的方法来获取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))))
Run Code Online (Sandbox Code Playgroud)
但这似乎不必要地复杂化(似乎它会受到Bindings部分中记录的一些相同错误的影响).
在给定字段名称和请求的情况下,是否有一个或多或少的标准,无错误的方法来获取POST/GET变量的值?或者更好的是,将POST/GET值的集合作为列表/散列/列表返回的方法是什么?除了其中任何一个,是否有一个函数可以做同样的事情,但只有POST变量,忽略GET?
小智 3
extract-bound 不好,因为它不区分大小写,对于多次返回的输入来说非常混乱,没有处理文件上传的方法,并且自动假设所有内容都是 UTF-8,但这不一定是真的。如果您能接受这些问题,请放心使用。
当数据为 UTF-8 并且只有一个字段返回时,您编写的代码片段有效。您可以将其定义为一个函数,并避免多次编写。
一般来说,我建议使用 formlet 来处理表单及其值。
现在你的问题...
“在给定字段名称和请求的情况下,是否有一种或多或少标准的、无错误的方法来获取 POST/GET 变量的值?”
你拥有的是标准的东西,尽管你错误地认为只有一个值。当有多个时,您需要过滤字段名称上的绑定。同样,您不需要将值转换为字符串,您可以将其保留为字节就好。
“或者更好的是,一种以列表/散列/列表形式取回 POST/GET 值集合的方法?”
这就是 request-bindings/raw 的作用。它是一个列表绑定吗?对象。由于返回多个值,将其转换为哈希是没有意义的。
“除了其中任何一个,是否有一个函数可以执行相同的操作,但仅适用于 POST 变量,而忽略 GET?”
Web 服务器向您隐藏了 POST 和 GET 之间的区别。您可以检查 uri 和原始发布数据来恢复它们,但您必须自己解析它们。我不推荐它。
杰伊