如何在发送正文的node.js中发出GET请求?

时间:2019-08-22 12:42:45

标签: javascript node.js

我很想知道如何在发送正文的node.js中发出GET请求。

   const options = {
        hostname: 'localhost',
        port: 3000,
        path: '/abc',
        method: 'GET'
    }

    http.get(options, (res) => {
        res.on('data', (chunk) => {
            console.log(String(chunk))
        })
    })

3 个答案:

答案 0 :(得分:3)

the documentation中所述:

  

由于大多数请求都是不带主体的GET请求,因此Node.js提供了这种便捷方法。此方法与http.request()之间的唯一区别是,它将方法设置为GET并自动调用了req.end()

因此答案是直接使用http.requesthttp.request有一个使用POST的示例,但对于GET来说都是相同的(以http.request开始请求,使用write发送正文数据,完成发送数据后使用end ),除了(如上所述)GET通常没有任何主体的事实。实际上,RFC 7231指出:

  

GET请求消息中的有效负载没有定义的语义;   在GET请求上发送有效内容正文可能会导致一些现有内容   拒绝请求的实现。

答案 1 :(得分:0)

使用标准的http:

`const http = require('http');

https.get('http://localhost:3000/abc', (resp) => {

  let data = '';

  // A chunk of data has been recieved.
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // The whole response has been received. Print out the result.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});`

希望这会有所帮助

答案 2 :(得分:0)

完全不建议在GET请求中使用Body,因为它不是HTTP 1.1的建议行为,但是您可以使用以下方法:

const data = JSON.stringify({
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
});


const https = require('https')

const options = {
  hostname: 'jsonplaceholder.typicode.com',
  port: 443,
  path: '/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}

const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)

res.on('data', (d) => {
        process.stdout.write(d)
    })
})

req.on('error', (error) => {
  console.error(error)
})

req.write(data)
req.end()