电子webview loadURL POST

时间:2018-01-05 03:32:32

标签: node.js electron

我在SO上找不到任何类似的问题。

有人可以告诉我一个关于如何在POST中使用loadURL的示例吗?我目前正在做以下

const url = firebaseCloudFunctionURL+"/endpointAPI";
const webview = document.createElement('webview');
webview.setAttribute("src", "https://www.nytimes.com/"); // forces dom-ready event to be called
webview.addEventListener('dom-ready', () => {
    const postDict = {
        query: "test_string"
    };            
    webview.loadURL(url, {postData: postDict});
});

但是,Web服务器显示请求正文为空 (使用Firebase云功能)

exports.endpointAPI = functions.https.onRequest((req, res) => {
    const test = req.body.shop;
    console.log("req.body "+ JSON.stringify(req.body));
});

在日志中产生“req.body {}”。

electron documentation postData中使用UploadRawData []编写。但是没有示例代码。有没有人让它上班?

2 个答案:

答案 0 :(得分:1)

根据文档建议,您应该提供postData以符合类型 Array<UploadRawData> | Array<UploadFile> | Array<UploadFileSystem> | Array<UploadBlob>,所以预期不会发送,因为您只是添加了普通对象。对于最简单的伪示例,如下所示

webview.loadURL(url, {
    postData: [{
      type: 'rawData',
      bytes: Buffer.from('test_string2')
    }]
  })

显示具有给定字符串的缓冲区对象的帖子。首先,你应该发送数组,其次你应该遵循接受的对象类型的正确类型。

答案 1 :(得分:0)

请务必设置extraHeaders

webview.loadURL(url, {
  postData: [{
    type: "rawData",
    bytes: Buffer.from("foo=bar")
  }],
  extraHeaders: "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
});