Nodejs 用request作post请求,需要有key值重复的form表单怎么做?

Nodejs 用request作post请求,需要有key值重复的form表单怎么做?

用request模拟一个请求,该请求的提交的表单如图所示:

fiddler所截取

发现提交的表单中Key值有相同的,按照之前的请求方式:

request.post({
    uri: 'xxxxxx',
    headers: {
        contentType: 'application/x-www-form-urlencoded;charset=utf-8'
    },
    form: {
        key:value,
        key: value
    }
},function(error, response, content){
    //....
});

肯定是不行的,因为form的值是个json对象,json的key值是不能重复的,那该怎么做啊?


5 回复

要解决这个问题,我们需要构造一个特定格式的字符串来表示重复键的表单数据。request 库支持将表单数据作为字符串传递给 form 参数,因此我们可以手动构建这个字符串。

下面是具体的步骤和示例代码:

步骤

  1. 构造表单数据字符串:我们需要创建一个字符串,其中包含重复的键,并使用 & 符号分隔每个键值对。
  2. 设置正确的 Content-Type:由于我们传递的是原始字符串而不是 JSON 对象,所以需要将 Content-Type 设置为 application/x-www-form-urlencoded

示例代码

const request = require('request');

// 构造表单数据字符串
let formData = 'key=value1&key=value2';

// 发送 POST 请求
request.post({
    url: 'https://example.com/api',  // 替换为目标URL
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
    },
    body: formData
}, function (error, response, body) {
    if (error) {
        console.error("Error:", error);
    } else {
        console.log("Response:", body);
    }
});

解释

  1. 构造表单数据字符串

    • 我们手动构建了一个字符串 formData,其中包含了重复的键 key 和不同的值 value1value2
    • 这个字符串的格式是 key=value1&key=value2,其中 & 分隔每个键值对。
  2. 发送 POST 请求

    • 使用 request.post 方法发送 POST 请求。
    • 设置 url 为目标 API 的 URL。
    • 设置 headers 中的 Content-Typeapplication/x-www-form-urlencoded;charset=utf-8,以指示请求体中的数据格式。
    • 将构造好的 formData 字符串传递给 body 参数。

通过这种方式,你可以成功地发送包含重复键的表单数据。


你可以用data

request.post({ uri: ‘xxxxxx’, headers: { contentType: ‘application/x-www-form-urlencoded;charset=utf-8’ }, body: buffer or string },function(error, response, content){ //… });

body的值是’key=value&key=value’呢还是’{key:value,key:value}'呢?

在Node.js中使用request库发送POST请求时,如果表单中的键(key)值需要重复,可以通过使用数组来实现。在JavaScript中,JSON对象的键值是唯一的,但数组可以包含多个相同键的项。

下面是一个示例代码,展示了如何使用request库发送具有重复键值的POST请求:

const request = require('request');

// 使用数组来处理重复的键
let formData = [
    ['key', 'value1'],
    ['key', 'value2']
];

request.post({
    uri: 'https://example.com/submit',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    form: formData
}, function (error, response, body) {
    if (error) {
        console.error('Error:', error);
    } else {
        console.log('Response:', body);
    }
});

在这个例子中,formData被定义为一个数组,其中每个元素都是一个表示键值对的数组。这样,即使键相同,也可以通过这种方式将多个值传递给同一个键。

请注意,上述代码示例假设你已经安装了request库。如果还没有安装,可以使用以下命令进行安装:

npm install request

这种方法可以有效地解决在表单数据中需要重复键的情况。

回到顶部