如何在Node.js中发出cURL请求

2,822 阅读4分钟

在Node.js中发出cURL请求

cURL(客户端URL)是一个免费的工具,用于从终端使用各种可用协议进行网络请求。当人们想让一个应用程序在不一定有用户参与的情况下进行请求时,例如检查和验证使用API的访问令牌,它就非常有用。对于像我这样的后端开发者来说,当我们想发送表单数据来测试我们的API时,它可能会派上用场,而不需要为表单设计一个用户界面。当然,还有Postman,但有了它,你可以定制并对它有更多的控制。

简介

cURL支持各种协议,如HTTP、FTP、FILE等。除了命令行之外,我们还可以用cURL在网页上显示从请求中得到的响应。下面是一个cURL命令的例子。

curl -o doc.html <url/doc.html>

该命令向服务器发出请求,然后将得到的网页存储为doc.html 或任何可能选择的名称。-o 标志用于添加一个文件名,网页将被保存为该文件名。

让我们来看看其他的命令,这些命令展示了对协议的具体选择。

curl section.io

CURL默认使用HTTP协议。要切换到另一个协议,可以在URL前加上协议ie。

curl ftp://section.io

我们现在使用的是FTP协议。

在这篇文章中,我们将通过使用node-libcurl 库在Node.js中使用cURL。我们将通过库的介绍性功能,在我们的案例中,我们将看一下表单提交。之所以选择这个,是因为它对初学者来说更容易理解。

有一点要注意的是,node-libcurl 是用于本地代码的,而不是用于浏览器。你可以使用从各个请求中得到的结果来做一些浏览器渲染。

前提条件

要很好地理解本文的内容,必须具备以下条件。

  1. 对JavaScript和Node.js有基本了解
  2. 安装了Node.js(npm)。

进入它

我们首先安装库。

npm i node-libcurl --save

或如果使用Yarn。

yarn add node-libcurl

我们将使用该库提供的Curl() 类来执行表单请求。

开始时,用你喜欢的名字创建一个JavaScript文件,然后在其中写下以下片段。

const querystring = require("querystring");
const { Curl } = require("node-libcurl");
const terminate = curlTest.close.bind(curlTest);

在这里,我们要导入Curl() 类和querystring 模块。querystring 允许我们访问querystring API,它提供了处理URL字符串的功能。最后,最后一条语句启动了类的一个方法,用于关闭一个curl请求。

const curlTest = new Curl();

curlTest.setOpt(Curl.option.URL, "https://reqres.in/api/users");
curlTest.setOpt(Curl.option.POST, true);
curlTest.setOpt(
	Curl.option.POSTFIELDS,
	querystring.stringify({
		name: "section",
		job: "webdev",
	})
);

接下来,我们初始化curl类,创建一个名为curlTest 的对象。我们使用setOpt() 方法设置各种选项。第一个选项是传入请求将被发送到的URL。第二个是方法,最后一个是POST参数。

我们使用reqres.in/,因为它是一个可以接受所有REST方法的API。如果一个人想为他/她的项目获得一些测试响应,它是有帮助的。花点时间访问它吧。该库目前支持POST方法。

curlTest.on("end", function (statusCode, data, headers) {
	console.info("Status code " + statusCode);
	console.info("***");
	console.info("Our response: " + data);
	console.info("***");
	console.info("Length: " + data.length);
	console.info("***");
	console.info("Total time taken: " + this.getInfo("TOTAL_TIME"));

	this.close();
});
curlTest.on("error", terminate);

上面的片段是用来显示关于请求的一些信息。它记录了响应的状态代码,如404、200等,响应,其长度,以及所花费的总时间。如果出现错误,它会关闭请求。

curlTest.perform();

上面这一行现在被用来执行请求,因此方法的名称是这样的。它启动了cURL请求。

下面是完整的代码。

const querystring = require("querystring");
const { Curl } = require("node-libcurl");
const terminate = curlTest.close.bind(curlTest);

const curlTest = new Curl();

curlTest.setOpt(Curl.option.URL, "https://reqres.in/api/users");
curlTest.setOpt(Curl.option.POST, true);
curlTest.setOpt(
	Curl.option.POSTFIELDS,
	querystring.stringify({
		name: "section",
		job: "webdev",
	})
);

curlTest.on("end", function (statusCode, data, headers) {
	console.info("Status code " + statusCode);
	console.info("***");
	console.info("Our response: " + data);
	console.info("***");
	console.info("Length: " + data.length);
	console.info("***");
	console.info("Total time taken: " + this.getInfo("TOTAL_TIME"));

	this.close();
});
curlTest.on("error", terminate);

curlTest.perform();

预期输出

在成功运行该文件后,我们应该看到如下格式的输出。

Status code 201
***
Our response: {"name":"section","job":"web dev","id":"99","createdAt":"2021-05-30T13:51:11.922Z"}
***
Length: 83
***
Total time taken: 0.633325

上传文件

执行文件上传使用同样的格式,只是我们增加了一些参数。

curl.setOpt(Curl.option.URL, '<the-backend-script-url-for-processing-the-upload>');
curl.setOpt(Curl.option.HTTPPOST, [
    { name: '<name-of-input>', file: '<path-in-your-device-directory>', type: '<filetype>' }
]);

我们在参数栏中添加文件路径和类型。另外,注意我们使用的是HTTPPOST,它用于多部分表单上传。

总结

这是一个关于libcurl库的初级指南。然而,它并不仅仅局限于表单上传。

综上所述,我们已经看到什么是cURL,如何在Node.js中安装和使用它。它是一个非常有用的、轻量级的工具。