📌  相关文章
📜  节点发送 post 请求 - Javascript (1)

📅  最后修改于: 2023-12-03 15:27:45.678000             🧑  作者: Mango

节点发送 post 请求 - Javascript

在 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-Typeapplication/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-Typeapplication/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-Typeapplication/json。在得到响应后,将响应的数据解析为 JSON 对象,并打印出来。如果请求失败,则会抛出错误信息。