在 Node.js 中,我们经常需要向外部服务发起 HTTP 请求来获取数据或者将数据发送到指定的 URL 上。request
库是 Node.js 中最常用的 HTTP 请求库之一,其具有使用方便、功能强大、可扩展性强等特点,被广泛应用于构建 Web 应用、爬虫等场景。
本篇文章将为大家详细介绍 Node.js 中如何使用 request 库发送 HTTP 请求,以及一些常见的实际应用场景。
安装 request
在开始之前,我们需要先安装 request 库,可以通过 npm 进行安装。
npm install request --save
安装完毕后,我们就可以在项目中使用 request 库了。
发送 HTTP 请求
request 库支持多种 HTTP 请求类型,包括 GET、POST、PUT、DELETE 等。我们可以通过不同的方法来发送这些不同类型的请求。
发送 GET 请求
发送 GET 请求最简单的方法是使用 request.get
方法,该方法接收两个参数:请求 URL 和回调函数。回调函数将在请求返回时被调用,其中第一个参数是可能的错误对象,第二个参数是带有请求结果的响应对象。
-- -------------------- ---- ------- ----- ------- - ------------------- ------------------------------------- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
除了使用 request.get
方法外,我们还可以使用链式调用的方式构建请求对象。下面的示例展示了如何使用链式调用发送 GET 请求。
-- -------------------- ---- ------- ----- ------- - ------------------- ------- ------------------------------ --------------- -------- ---------- - --------------------- --------------------- ------------------- ---------------------------------- -- ------------ -------- ------- - ---------------------- ------- ---
发送 POST 请求
发送 POST 请求也很简单,只需要使用 request.post
方法即可。该方法接收三个参数:请求 URL、请求数据和回调函数。其中请求数据可以是 JSON 对象或者字符串,也可以是一个可读流。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - - ---- ------ ---- ----- -- -------------- ---- ------------------------- ----- ---- -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
类似 GET 请求,我们也可以使用链式调用的方式发送 POST 请求。下面的示例展示了如何使用链式调用发送 POST 请求。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -- - -------------- ----- ---- - - ---- ------ ---- ----- -- ------- ------------------------------- - ----- ---- -- --------------- -------- ---------- - --------------------- --------------------- ------------------- ---------------------------------- -- ------------ -------- ------- - ---------------------- ------- -- --------------------------------------------
发送 PUT 请求
发送 PUT 请求同样很简单,只需要使用 request.put
方法即可。该方法接收三个参数:请求 URL、请求数据和回调函数。其中请求数据可以是 JSON 对象或者字符串,也可以是一个可读流。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - - ---- ------ ---- ----- -- ------------- ---- ------------------------- ----- ---- -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
发送 DELETE 请求
发送 DELETE 请求同样很简单,只需要使用 request.delete
方法即可。该方法接收两个参数:请求 URL 和回调函数。
-- -------------------- ---- ------- ----- ------- - ------------------- ---------------------------------------- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
除了上述四种方法以外,request 库还提供了其他一些方法,例如 request.head
、request.patch
等,可以根据自己的需求选择使用。
Request 配置
request 库具有丰富的配置选项,通过这些配置选项,我们可以自定义请求的一些参数,满足不同的需求。
设置请求头
可以通过配置 headers
来设置请求头信息,其中 key 是头信息的键名,value 是键值。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------- - - ------------- ------------ ------------ ---- ---- ------- -- ------ --------------- ------------------ -- -------------- ---- ------------------------- -------- -------- ----- ----- ----- - ---- ------ ---- ----- - -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
设置请求超时时间
可以通过配置 timeout
来设置请求超时时间(单位为毫秒)。
-- -------------------- ---- ------- ----- ------- - ------------------- ------------- ---- ------------------------- -------- ---- -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
设置代理
可以通过配置 proxy
来设置代理服务器的地址和端口号,以便请求能够通过代理服务器进行访问。
-- -------------------- ---- ------- ----- ------- - ------------------- ------------- ---- ------------------------- ------ ----------------------- -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
设置认证信息
可以通过配置 auth
来设置 HTTP 基本认证信息,其中 user
是用户名,pass
是密码。
-- -------------------- ---- ------- ----- ------- - ------------------- ------------- ---- ------------------------- ----- - ----- ------- ----- ----- - -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
实际应用
爬取网页内容
通过 request 库,我们可以方便地爬取其他网站的内容。下面的示例展示了如何使用 request 库爬取某个网站的首页内容,以及如何使用 cheerio
库来解析 HTML。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------- - ------------------- ------------------------------------- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - ----- - - ------------------- -------------------- -- - ---------------------------------- --- - ---
调用 RESTful API
通过 request 库,我们可以方便地调用 RESTful API。下面的示例展示了如何调用某个 API 并获取其返回的数据。
-- -------------------- ---- ------- ----- ------- - ------------------- ---------------------------------------------- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - ----- ---- - ----------------- ------------------- --------------- ------------------ ------------ - ---
上传文件
通过 request 库,我们可以方便地上传文件。下面的示例展示了如何上传文件并获取其返回的信息。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - - ----- - ------ ------------------------------------- -------- - --------- ----------- ------------ ------------ - - -- -------------- ---- -------------------------------- --------- -------- -- -------- ------- --------- ----- - -- ------- - ---------------------- ------- - ---- - --------------------- --------------------- -------------------- ------ - ---
总结
本篇文章详细介绍了在 Node.js 中使用 request 库发送 HTTP 请求的方法,并演示了不同类型的请求以及一些常见的配置选项。通过使用 request 库,我们可以方便地调用其他服务或者爬取其他网站的内容,实现各种不同的实际应用场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ab46c148841e9894720a6d