簡體   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