我很想知道如何在发送正文的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))
})
})
答案 0 :(得分:3)
如the documentation中所述:
由于大多数请求都是不带主体的GET请求,因此Node.js提供了这种便捷方法。此方法与
http.request()
之间的唯一区别是,它将方法设置为GET并自动调用了req.end()
。
因此答案是直接使用http.request
。 http.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()