Javascript 如何使用NodeJS伪造浏览器POST请求?

Javascript 如何使用NodeJS伪造浏览器POST请求?,javascript,node.js,http,post,Javascript,Node.js,Http,Post,我想像浏览器一样向example.com发送一个POST请求。您提交的example.com上有一个表单,它为您提供了所选子集的信息 当我用浏览器提交时,它会显示信息。以下是Chrome中的页面标题: 但是当我尝试从myserver.com发送请求时,如下所示: request.post({ url: 'http://example.com', json : false, withCredentials: true, headers: { //'

我想像浏览器一样向
example.com
发送一个POST请求。您提交的
example.com
上有一个表单,它为您提供了所选子集的信息

当我用浏览器提交时,它会显示信息。以下是Chrome中的页面标题:

但是当我尝试从
myserver.com
发送请求时,如下所示:

request.post({
    url: 'http://example.com',
    json : false,
    withCredentials: true,
    headers: {
        //'POST /study/?id=11 HTTP/1.1':'',
        'Host':'example.com',
        'Connection':'keep-alive',
        'Content-Length':'34',
        'Cache-Control':'max-age=0',
        'Origin':'http://example.com',
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
        'Content-Type':'application/x-www-form-urlencoded',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Referer':'http://example.com',
        //'Accept-Encoding':'gzip, deflate',
        'Accept-Language':'en-US,en;q=0.8,ru;q=0.6',
        'Cookie':'ssd_num=1m99jeo61eb4srduha9osqr9p2',
        'X-Compress':'null',
    },
    formData: {
        'tmtblTip':'0',
        'showKla':'10%E0',
        'sbShRKl':'1'
    },
    encoding: null
}, (err, res, data) => {
    if (err) {
        console.log('Error:', err);
    } else if (res.statusCode !== 200) {
        console.log('Status:', res.statusCode);
    } else {
        // data is already parsed as JSON:
        //let bodyWithCorrectEncoding = iconv.decode(data, 'win1251');
        let bodyWithCorrectEncoding = toUtf(data, 'utf8','win1251');
        console.log(bodyWithCorrectEncoding);
    }
});
当我这样做时,它会返回网页,但它说
没有这样的子集


您能告诉我这些请求(我的和浏览器的)之间有什么区别吗?

由于没有一个最小的、完整的、可验证的示例,我们无法知道。查看服务器的日志?问题是我没有
example.com
。我正在尝试为itI制作一个API,我建议您使用Node来创建自己的服务器,并查看浏览器对它发出的传入请求,与JS客户端发出的传入请求,看看它们有什么不同(如果有的话)。您试图手动提供这些标题中的大部分,这可能会给自己带来麻烦,尽管几乎肯定需要
Cookie
!我禁用了chrome中的cookies。删除了所有缓存,但
example.com
仍通过浏览器向我提供了子集。禁用cookie可能会导致失败。你有没有试过我的建议,让你自己制作一个愚蠢的日志服务器?您可以使用Chrome的“copy request as cURL”为您提供一些可以轻松修改的内容,以指向您自己的服务器。