繁体   English   中英

如何防止POST正文中的单位长度数组转换为字符串?

[英]How to prevent an array of unit length in POST body from being converted to a string?

在 node.js 中,我使用这里的代码来提取 POST 数据。

那是:

var qs = require('querystring');
function (request, response) {
    if (request.method == 'POST') {
        var body = '';
        request.on('data', function (data) {
            body += data;
            request.connection.destroy();
        });

        request.on('end', function () {
            var post = qs.parse(body);
            console.log(post.foo);
        });
    }
}

我正在使用 Python requests 库发出请求。 当数组foo有多个元素时,输出符合预期。

requests.post(url, data={'foo': ['bar', 'baz']})给出['bar', 'baz']

然而,如果数组中只有一个元素,变量foo就会变成一个字符串!

requests.post(url, data={'foo': ['bar']})给出bar而不是['bar']

我不想做这样的事情:

if (typeof post.foo === 'string')
    post.foo = [post.foo]

确保客户端只发送数组。

查询字符串格式没有“数组”的概念。

您正在使用的库只会在给定数据数组时将重复的键插入到结果中。 这是标准做法。

所以:

requests.post(url, data={'foo': 'one-value-only', 'bar': ['first-value', 'second-value']})

会给你:

foo=one-value-only&bar=first-value&bar=second-value

然后你用 JavaScript 解析它。 您可以从正在使用的库中查看源代码 如果它获得具有给定名称的第二个键,它会用一个数组替换它返回的值。

该代码中没有任何内容为您提供始终返回数组的选项。

这给您留下了三个选择:

  1. 对您说不想执行的结果执行测试
  2. 编辑查询字符串库,使第 71 行读取obj[k] = [v];
  3. 使用不同的库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM