如何发送重复的 POST 参数

How to send duplicate POST parameters

我正在尝试为我经常使用的网站编写替代方案 UI。我正在用 Node.js 使用 requestcheerio 来抓取网页数据。

但是,当我尝试向该站点发送 POST 请求时出现问题。我想在此处检索 类 的列表而不先通过此页面,但是开发工具中显示的正常 post 参数的结构如下:

sel_subj:dummy
bl_online:FALSE
sel_day:dummy
term:201630
sel_subj:ACTG
sel_inst:ANY
sel_online:
sel_crse:
begin_hh:0
begin_mi:0
end_hh:0
end_mi:0

我可以修改任何其他值(termsel_crse 等),但是 sel_subj 没有兼容的值,所以服务器只使用默认值值。

我一直在为 request 中的 form 对象参数尝试不同的值,但其中 none 有效:

sel_subj: ["M", "dummy"]
sel_subj: ["dummy", "M"]
sel_subj: "M"
sel_subj: "dummy,M"
sel_subj: "M,dummy"
sel_subj: "dummy M"
sel_subj: "M dummy"
sel_subj: "dummy, M"
sel_subj: "M, dummy"

我想弄清楚 POST 请求中的重复字段是什么意思,服务器期望什么,以及如何使用 request

重现它

如果参数名可以重复,请求体可以自己设计:

var headers = {'content-type' : 'application/x-www-form-urlencoded'};
var body = [];

var params = [
    { sel_subj:'dummy' }, // duplicates 
    { bl_online:false },
    { sel_day:'dummy' },
    { term:'201630'},
    { sel_subj:'ACTG'}, // duplicates 
    { sel_inst:'ANY'},
    { sel_online: null},
    { sel_crse: null},
    { begin_hh:0},
    { begin_mi:0},
    { end_hh:0},
    { end_mi:0}
];

params.forEach( function(p) {
    body.push( require('querystring').stringify(p) );
});

var r = request.post({  url:'http://localhost/api/', 
                        headers: headers, 
                        body:body.join('&')
                     });