Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Puppeter中的post请求产生意外结果_Javascript_Node.js_Puppeteer - Fatal编程技术网

Javascript Puppeter中的post请求产生意外结果

Javascript Puppeter中的post请求产生意外结果,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我知道这已经包含在另一个问题中: . 但出于某种原因,我做错了什么 我遇到了来自服务器的post请求问题,我需要的数据。 如果我直接从网站控制台(使用ctrl+shift+I)编写以下post请求,效果会很好 full = $.post('https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx', {"AjaxCallAction":"AddProductToBasket","paramProductID":72960732

我知道这已经包含在另一个问题中: . 但出于某种原因,我做错了什么

我遇到了来自服务器的post请求问题,我需要的数据。

如果我直接从网站控制台(使用ctrl+shift+I)编写以下post请求,效果会很好

full = $.post('https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx',
{"AjaxCallAction":"AddProductToBasket","paramProductID":7296073231578,"paramQuantity":2,"paramRemarks":"","paramUM":""});

console.log(full.responseText); //required data
我从服务器控制台得到的响应的屏幕截图: 在这里

但是当我用下面的脚本写这篇文章时,我并没有得到同样的结果

const puppeteer = require('puppeteer');
async function run() {
    let browser = await puppeteer.launch({ headless: false });
    let page = await browser.newPage();
    await page.setRequestInterception(true); //set the request option (triggered with goto)
    page.on('request', req => {
        //create data
        let prodID = 7296073231578; //shoko
        let qty = 2;
        let remarks='';
        let unitofmeasure = '';
        var request = {
            AjaxCallAction:"AddProductToBasket",
            paramProductID:prodID,
            paramQuantity:qty,
            paramRemarks:remarks,
            paramUM:unitofmeasure
        }

        var data = {
            'method': 'POST',
            'url': 'https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx', //just to make sure
            'postData': JSON.stringify(request)
        };
        req.continue(data);

    });

    const response = await page.goto('https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx');
    console.log(response.statusText());
    console.log(response.responseText);

    console.log('done');
}   
run();
我在cmd中得到以下结果:

OK
undefined
done
另外,如果我尝试使用nodejs的“request”发布请求: (使用)
但它似乎也不起作用。

您需要使用
x-www-form-urlencoded
发送请求正文,例如:

AjaxCallAction=AddProductToBasket&paramProductID=12345&....
修改req正文或创建URL编码转换器的对象。还需要设置标题
内容类型
,并从
响应
事件侦听器捕获响应

async function run() {
    let browser = await puppeteer.launch({headless: false});
    let page = await browser.newPage();
    await page.setRequestInterception(true); //set the request option (triggered with goto)
    page.on('request', req => {
        //create data
        let prodID = 7296073231578; //shoko
        let qty = 2;
        let remarks = '';
        let unitofmeasure = '';
        var request = {
            AjaxCallAction: "AddProductToBasket",
            paramProductID: prodID,
            paramQuantity: qty,
            paramRemarks: remarks,
            paramUM: unitofmeasure
        }
        // convert JSON to x-www-form-urlencoded
        let reqBody = Object.keys(request).map((k) => {
            return encodeURIComponent(k) + '=' + encodeURIComponent(request[k])
        }).join('&');
        var data = {
            'method': 'POST',
            'url': 'https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx',
             // the custom headers
            'headers': {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Requested-With': 'XMLHttpRequest'
            },
            'postData': reqBody
        };
        req.continue(data);
    });
    // capture intercepted response
    page.on('response', async response => {
        console.log("Resource Type: "  + response.request().resourceType());
        console.log("Response Text: " + await response.text());
        console.log("==============");
    });

    const response = await page.goto('https://www.shufersal.co.il/_layouts/Shufersal_Pages/ajax.aspx');
    // only capture default response
    //console.log(response.statusText());
    //console.log(response.responseText);

    //console.log('done');

}

run();

尝试使用:var data={'dataType':'json','contentType':'application/json;charset=utf-8','method':'POST','url','postData':json.stringify(请求)}@Amine Ramoul你好,谢谢你的帮助。我尝试了你所说的,但它也做了同样的事情(顺便说一句,在url中添加了“https:www-to”,但没有说url无效)。这种方法仍然有效吗?对我来说,当我像这样发布数据时,数据不会被传递。他的代码工作得非常好。只需添加“constpuppeter=require('puppeter');”。