【问题标题】:Making a POST request using puppeteer with JSON payload使用带有 JSON 有效负载的 puppeteer 发出 POST 请求
【发布时间】:2018-10-29 15:09:09
【问题描述】:

我正在尝试使用 puppeteer 发出一个 POST 请求并在请求中发送一个 JSON 对象,但是,我遇到了超时...如果我尝试发送至少一个正常的编码表单数据从服务器获取无效请求的回复... 这是代码的相关部分

await page.setRequestInterception(true);
    const request = {"mac": macAddress, "cmd": "block"};
    page.on('request', interceptedRequest => {

        var data = {
            'method': 'POST',
            'postData': request
        };

        interceptedRequest.continue(data);
    });
    const response = await page.goto(configuration.commandUrl);     
    let responseBody = await response.text();

我正在使用相同的代码发出 GET 请求(无负载)及其工作

【问题讨论】:

    标签: node.js puppeteer headless-browser


    【解决方案1】:

    postData 需要编码为表单数据(格式为key1=value1&key2=value2)。

    您可以自己创建字符串或使用内置模块querystring

    const querystring = require('querystring');
    // ...
            var data = {
                'method': 'POST',
                'postData': querystring.stringify(request)
            };
    

    如果您需要提交 JSON 数据:

                'postData': JSON.stringify(request)
    

    【讨论】:

    • 感谢@tomas,但服务器需要 json 格式而不是 url 编码...有没有办法使用 json 从 puppeteer 发布?
    • 你可以只提交 JSON 数据然后(我编辑了答案)。
    • 有谁知道这是否仍然有效?当我尝试这个时,postData 显示为空。
    • 在 puppeteer URL 上,我应该如何访问数据?
    • 看来res.bodyreq.queryreq.params是空的
    【解决方案2】:

    如果是发送json,需要加上“content-type”:“application/json”。如果您不发送它,您可能会收到一个空响应。

    var data = {
        method : 'POST',
        postData: '{"test":"test_data"}',
        headers: { ...interceptedRequest.headers(), "content-type": "application/json"}
    };
    interceptedRequest.continue(data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      相关资源
      最近更新 更多