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 值集合的方法?除了其中任何一个之外,是否有一个函数可以执行相同的操作,但仅适用于 POST 变量,而忽略 GET?
extract-binding 不好,因为它不区分大小写,对于多次返回的输入来说非常混乱,没有处理文件上传的方法,并且自动假设所有内容都是 UTF-8,这不一定是真的。如果您能接受这些问题,请放心使用。
当数据为 UTF-8 并且只有一个字段返回时,您编写的代码片段有效。您可以将其定义为一个函数,并避免多次编写。
一般来说,我建议使用 formlet 来处理表单及其值。
现在你的问题...
“在给定字段名称和请求的情况下,是否有一种或多或少标准的、无错误的方法来获取 POST/GET 变量的值?”
你拥有的是标准的东西,尽管你错误地认为只有一个值。当有多个时,您需要过滤字段名称上的绑定。同样,你也不need要将值转换为字符串,您可以将其保留为字节就好。
“或者更好的是,一种以列表/散列/列表形式取回 POST/GET 值集合的方法?”
这就是 request-bindings/raw 的作用。它是一个列表绑定吗?对象。由于返回多个值,将其转换为哈希是没有意义的。
“除了其中任何一个,是否有一个函数可以执行相同的操作,但仅适用于 POST 变量,而忽略 GET?”
Web 服务器向您隐藏了 POST 和 GET 之间的区别。您可以检查 uri 和原始发布数据来恢复它们,但您必须自己解析它们。我不推荐它。
Jay
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)