📅  最后修改于: 2023-12-03 15:27:45.678000             🧑  作者: Mango
在 Javascript 中,可以使用 XMLHttpRequest
或者 fetch
API 来发送 HTTP 请求,其中包括发送 POST 请求。在 Node.js 中,可以使用 http
或者 https
模块来完成发送请求的操作。
http
模块发送 POST 请求const http = require('http');
const querystring = require('querystring');
const postData = querystring.stringify({
'message': 'Hello World!'
});
const options = {
hostname: 'www.example.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
req.write(postData);
req.end();
上面的代码向 www.example.com
的 /upload
路径发送了一个 POST 请求,请求体为 message=Hello%20World!
,并且指定了请求头中 Content-Type
为 application/x-www-form-urlencoded
,请求体的长度为 Buffer.byteLength(postData)
。在响应体中,每次收到数据都会触发 data
事件,最后触发 end
事件表示响应体已完全接收。
https
模块发送 POST 请求如果要向 HTTPS 协议的服务器发送请求,可以使用 https
模块,其用法和 http
模块基本相同。
const https = require('https');
const querystring = require('querystring');
const postData = querystring.stringify({
'message': 'Hello World!'
});
const options = {
hostname: 'www.example.com',
port: 443,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
req.write(postData);
req.end();
axios
库发送 POST 请求axios
是一个基于 Promise 的 HTTP 客户端,可以用于浏览器和 Node.js。使用 axios
发送 POST 请求十分方便。
const axios = require('axios');
const data = {
message: 'Hello World!'
};
const config = {
headers: {
'Content-Type': 'application/json'
}
};
axios.post('https://www.example.com/upload', data, config)
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
上面的代码通过 axios.post
方法向 https://www.example.com/upload
发送了一个 POST 请求,并且指定了请求体为一个 JSON 对象,请求头中 Content-Type
为 application/json
。在得到响应后,将响应的数据打印出来。如果请求失败,则会抛出错误信息。
node-fetch
库发送 POST 请求node-fetch
是一个基于 Promise 的 HTTP 客户端,适用于 Node.js 环境。使用 node-fetch
发送 POST 请求也十分简单。
const fetch = require('node-fetch');
const data = {
message: 'Hello World!'
};
const config = {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
};
fetch('https://www.example.com/upload', config)
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error(error);
});
上面的代码通过 fetch
方法向 https://www.example.com/upload
发送了一个 POST 请求,并且指定了请求体为一个 JSON 对象,请求头中 Content-Type
为 application/json
。在得到响应后,将响应的数据解析为 JSON 对象,并打印出来。如果请求失败,则会抛出错误信息。