位置: 编程技术 - 正文

详解node HTTP请求客户端 - Request

编辑:rootadmin

推荐整理分享详解node HTTP请求客户端 - Request,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Request是一个Node.jsNPM模块,它是一个HTTP客户端,使用简单功能确十分强大。我们可以用它来实现HTTP响应流的转接、模拟Form表单提交、支持HTTP认证、OAuth登录、自定义请求头等。下面我们来对这个模块做一个完整的介绍:

1. 安装及简单使用

安装request模块:

Request设计为用最简单的方法发送HTTP请求,它还支持HTTPS请求和自动重定向跟踪:

引用request模块后,就可以能通过request()方法来发送HTTP请求,在不指定请求选项option时,默认为GET。在上面请求中,对 流(stream)操作

Node.js原生HTTP模块实现了对HTTP请求和响应对象的流操作,Request同样支持基于流的操作。

如,可以将任何响应流通过pipe转接到一个文件流:

同样,可以将一个读取的文件流转接到PUT或POST请求中。这个方法会自动检查文件扩展名,并设置一个与文件扩展名对应的content-type(当该请求头未设置时):

Request也支持pipe到它自己。这样操作时,content-type和content-length将被传递到其后的PUT请求中:

与原生HTTP客户端一样,Request在收到请求响应时会发送一个'response'。事件回调函数中会包含一个response参数,它是一个http.IncomingMessage实例:

当请求发生错误时,可以简单的通过监听error事件来处理:

发挥一个想象:

也可以使用pipe()方法将一个http.ServerRequest实例转换到一个http.ServerResponse。HTTP请求方法、请求头、请求体数据会被发送:

通过pipe()返回的目标流,在Nodev0.5.x+版本中,可以写到一行:

而所有这些,没有一个新功能会与原功能有冲突,只是对其进行了扩展。还可以使用HTTP代理,请求会被自动重定向并跟踪:

3. Form表单

request支付application/x-www-form-urlencoded 和 multipart/form-data 编码的form 上传。multipart/related会引用multipartAPI。

application/x-www-form-urlencoded (URL编码的Form)

URL编码的Form很简单:

multipart/form-data (Multipart Form 上传)

对于multipart/form-dataFrom文件上传,Request使用了form-data处理。大多数情况,可以通过formData选项添加上传文件:

在一些更加高级的使用中,可以通过其自身的如r.form()来访问Form数据:

multipart/related

在一些不同的HTTP实现中,需要在multipart/related的之前、之后或前后同时添加一个newline/CRLF(通过multipart选项)。特别是在.NET WebAPI 4.0中,需要将preambleCRLF设置为true:

4. HTTP认证

在一些HTTP请求中,需要对请求对象进行身份验证。Request提供了多种身份验证方式:

当使用auth选项进,其可包含以下值:

user || username pass || password sendImmediately (可选) bearer (可选)

而对于最终调用的auth(username, password, sendImmediately, bearer)方法来说,sendImmediately默认为true,这会导致一个 basic 或 bearer 认证头会被发送。如果sendImmediately设置为false,request会在收到状态后尝试使用一个合适的认证头。

注意,也可以基于RFC 标准,在URL中添加认证信息。简单的是使用方式是在主机的@符号前添加user:password:

5. 自定义HTTP头

如果需要设置自定义的HTTP请求头,如:User-Agent,可以通过options对象设置。

6. OAuth签名

Request支持OAuth 1.0。其默认使用的签名算法为 HMAC-SHA1:

使用RSA-SHA1 签名时,可传入如下一个OAuth对象:

指定signature_method : 'RSA-SHA1' 代替consumer_secret,指定private_key字符串为 PEM format

而使用PLAINTEXT 签名,可传入如下一个OAuth对象:

指定signature_method : 'PLAINTEXT'

7. 代理

如果指定proxy(代理)选项后,所有的请求(及其后的重定向)都会连接到该代理服务器。

如果终端是一个httpsURL,代理会使用CONNECT请求连接到代理服务器。

首先会生成类似如下一个请求:

然后建立一个到endpoint-server(终端服务器)的端口的TCP连接,并按如下返回响应:

默认情况下,当代理使用http进行通讯时,request会简单的生成一个标准的http代理请求。如,会像如下这样生成一个请求:

通过proxyHeaderExclusiveList选项可以明确指定一些代理头,默认会按如下方式设置:

8. UNIX域套接字

request支持到UNIX域套接字的请求:

详解node HTTP请求客户端 - Request

注意:SOCKET应该是一个到文件系统根目录的绝对路径。

9. TLS/SSL协议

对于使用了TLS/SSL等安全协议的请求,可以使用相关选项如cert、key、passphrase也可以使用agentOptions选项甚至使用https.globalAgent.options来设置:

使用options.agentOptions

在下面示例中,我们调用一个需要API,它需要客户端SSL证书(PEM格式)用密码保护私钥(PEM格式)并禁用SSLv3协议:

如果强制使用SSLv3,则通过secureProtocol指定:

. 对HAR 1.2的支持

options.har属性会重写url。method, qs, headers, form, formData, body, json的值,当request.postData.params[].fileName的值不存在时,会从硬盘文件构建 multipart 数据

当HAC 请求匹配到指定规则时会执行验证检查,如果未匹配到则会跳过:

. option所有可用参数

request()的请求格式有如下两种形式:

当使用request.put()、request.post()等便捷方法进行请求时,同样有如下两种形式:

options表示请求选项,其中只有>url/uri是必须参数,其它都是可选值。下面是一些常用选项:

uri || url - 完整的uri字符串或可通过url.parse()解析的url对象 baseUrl - 用于基本uri的远整字符串。大多使用request.defaults,如:对于大多数请求你相使用相同的域名。如果baseUrl 是 会匹配到 method - HTTP请求方法(默认: "GET") headers - HTTP请求头 (默认: {})

查询字符串相关选项:

qs - 包含查询字符串值的对象,会被添加到uri中 qsParseOptions - 用于qs.parse方法的选项对象,或者传入querystring.parse方法用于{sep:';', eq:':', options:{}}格式的对象 qsStringifyOptions - 用于qs.stringify 方法的选项对象,或者传入用于querystring.stringify 方法使用{sep:';', eq:':', options:{}}格式的选项。 useQuerystring - 如果true,使用querystring 来解析查询字符串,其它使用qs (默认: false)。设置为true时,你需要将数组序列化为foo=bar&foo=baz 而默认为 foo[0]=bar&foo[1]=baz

请求体相关选项:

body - 可用于:PATCH, POST 和 PUT 请求的请求体(发送的数据)。必须是Buffer, String 或 ReadStream。如果json 是 true,则body 必须是一个JSON化的对象。 form - 当通过对象或查询字符串发送数据时,这一选项会设置body 为包含发送值的查询字符串,并添加自动Content-type: application/x-www-form-urlencoded请求头。 formData - 当发送multipart/form-data请求时使用。参见前面的Forms 一节。 multipart - 包含请求头与body属性的对象。会发送一个multipart/related请求。请求时使用。参见Forms。 也可以传入一个{chunked: false, data: []},其 chunked 用于指定发送请求的 chunked 转换编码。如果非chunked请求,,不允许使用使用具有请求体流的数据项。 preambleCRLF - 在multipart/form-data请求之前添加一个 newline/CRLF 边界描述 postambleCRLF - 在multipart/form-data请求之后添加一个 newline/CRLF 边界描述 json - 设置 body(请求体) 为JSON格式,并添加Content-type: application/json请求头。另外,也会将响应体转换为JSON格式 jsonReviver - 一个reviver函数,会传递给JSON.parse() 方法用于解板响应体。 jsonReplacer - 一个 replacer 函数,会传递给JSON.stringify()方法用于序列化JSON请求体

认证相关选项:

auth - 包含 user || username, pass || password, 和 sendImmediately (可选)的哈希对象。 oauth - 用于 OAuth HMAC-SHA1 签名的选项 hawk - 用于Hawk 签名的选项。credentials 键必须包含必要的签名信息,参见hawk文档 aws - object 包含 AWS 签名信息。需要有key、secret属性,同样要有bucket选项,除非已在路径中指定bucket或请求不使用 bucket (如 GET 服务)。如果要使用 AWS v4版本,则指定sign_version 选项值为 4,默认值为2。注意: 首先要 npm install aws4 httpSignature - 用于HTTP Signature Scheme的先项,使用Joyent's签名库。keyId 和 key 属性必须同时指定

重定向相关选项:

followRedirect - 跟踪 HTTP 3xx 响应并重定向(默认: true)。这个属性也可以指定为一个获取单个response的函数,如果重定向继续需要返回true 其它情况返回 false followAllRedirects - 跟踪非GET请求的 HTTP 3xx 响应(默认: false) maxRedirects - 最大重定向跟踪数量(默认: ) removeRefererHeader - 当发生重定向进移聊referer头(默认: false)。注意: 如果设为 true,referer头会设置为重定向链的初始请求。

编码/压缩相关选项:

encoding - 用于响应数据 setEncoding 头的编码。如果null,则 body 会返回一个 Buffer。任何情况下(除非设置为undefined) 都会将encoding 参数传递给 toString() 方法(默认为:utf8)。 gzip - 如果为 true,会添加一个Accept-Encoding 头用于发送到服务器的请求内容的压缩和解压从服务器返回的数据 jar - 如果 true,则记录使用的 cookies(或自定义 cookie jar)

代理相关选项:

agent - 用于http(s).Agent 的代理实例 agentClass - 或指定代理类 agentOptions - 并传入代理选项。注: 参见 HTTPS TLS/SSL API文档 和 代理一节 forever - 如果设置为 true 会使用 forever-agent pool - 描述用于请求的代理的对象。如果此选项被省略,请求将使用全局代理(当允许时)。否则,请求将搜索您的自定义代理的池。如果没有找到自定义代理,将创建一个新的代理,并将其添加到池中。注意: pool 仅在指定agent选项后可用 maxSockets属性同样可用于pool对象,用于设置代理最大可创建的 sockets 连接数(如:pool: {maxSockets: Infinity}) 当发送 multiple 请求时,会创建一个新的pool 对象,maxSockets 将不会按预期工作。 timeout - 超时时间(毫秒)

本地代理选项:

localAddress - 用于连接网络连接的本地接口 proxy - 使用的HTTP代理。支持代理使用基本认证,即认证信息通过url参数发送 strictSSL - 如果设置为true,则需要有效的 SSL证书。注意: 要使用自己的证书管理,则需要指定一个所创建的代理的选项。 tunnel - 控制 HTTP CONNECT 连接的隧道,可为以下值: undefined (默认) - true 表示目标为 https, false 为其它方式 true - 总是通过CONNECT隧道请求连接到目的 代理 false - 使用GET请求方法请求目标. proxyHeaderWhiteList -发送到代理隧道的请求头白名单 proxyHeaderExclusiveList - 发送到代理隧道的请求头白名单,仅用于代理而不是目标服务器

HAR相关选项:

time - 为true时,则请求-响应环(包括所有重定向)在指定毫秒内提供,响应结果的回应时长为elapsedTime har - HAR 1.2 请求对象 Object,将处理从HAR格式重写匹配值 callback - 或者通过选项对象传入请求回调函数。回调函数包含以下3个参灵敏: error - 错误对象(出错时存在,通常由http.ClientRequest对象返回) http.IncomingMessage对象 response 响应体(String、Buffer或JSON 对象)

. 便捷方法

Request还可以使用以HTTP方法命名的便捷方法。

request.defaults(options)

返回一个正常请求API的包装器,其默认值为所传递的options选项。

示例:

request.put

与request()方法相同,但默认method: "PUT"

request.patch

与request()方法相同,但默认method: "PATCH"

request.post

与request()方法相同,但默认method: "POST"

request.head

与request()方法相同,但默认method: "HEAD"

request.del / request.delete

与request()方法相同,但默认method: "DELETE"

request.get

与request()方法相同

request.cookie

创建一个新Cookie

request.jar

创建一个新Cookie Jar

注:Cookie Jar用于保存所访问网站的Cookie信息

. 使用示例

为了保持向后兼容,响应压缩默认不会启用。要访问gzip压缩的响应,需要将gzip选项设置为true。这样数据体会通过request自动解压缩,而响应的对象将未包含压缩数据。

Cookie默认是未启用的,可以通过将jar选项设置为true来启用Cookie:

使用自定义的Cookie Jar,可以将jar选项设置为一个request.jar()实例:

使用自定义的Cookie存储,可以做为request.jar()的参数传入:

Cookie存储必须是一个tough-cookie且必须支持同步操作。

在请求完成后,检查你的Cookie Jar:

标签: 详解node HTTP请求客户端 - Request

本文链接地址:https://www.jiuchutong.com/biancheng/379457.html 转载请保留说明!

上一篇:node.JS md5加密中文与php结果不一致的解决方法(js md5加密方法)

下一篇:使用nodejs爬取前程无忧前端技能排行(nodejs爬虫模拟浏览器)

  • 什么是纳税义务人,在理解这一观念时应注意哪些问题
  • 小微企业增值税减免政策
  • 财务凭证和预算凭证目录只能有一条数据
  • 能从科目余额表入账吗
  • 外经证到期如何填写最新有效期限
  • 配件的出口是否可以免抵退?
  • 企业实际发生的公益性捐赠支出
  • 每股收益无差别点公式
  • 赡养老人专项附加扣除可以是爷爷奶奶吗
  • 本月开的发票次月预缴如何做会计分录呢?
  • 个人代持股票的交易流程
  • 公司向股东借款计入什么科目
  • 事业单位收个人部分社保怎么入账
  • 收入做多增值税怎么算
  • 公司支付给股东付银行利息要交税吗怎么交
  • 认缴制需要多久交完
  • 收藏!广告制作税收分类编码总结
  • 用友t3财务报表模块打不开
  • 旅行社成本票没有收到,怎么挂账
  • 调整暂估有差价怎么办
  • 企业开具咨询费的发票
  • 资产处置收益计入哪个会计科目
  • 多发的奖金收回怎么做账
  • 汇算清缴当年分配的股息红利
  • 有限公司注册资金多少好
  • 磁盘碎片指的是磁盘因为长期使用
  • 支付给代理机构的手续费
  • macos字体
  • 员工宿舍的物业费要交个税吗
  • 编制合并报表的三种理论
  • dat文件转换成wps表格
  • 企业年金在缴费阶段涉及的税种包括
  • php 正则
  • jquery版本
  • php用img显示图片
  • springboot整合websocket怎么接受图片消息
  • 纳税人在电子税务局收到优惠政策
  • 合同发票收款付款管理系统源码
  • 电子发票找不到了可以找回吗
  • 金蝶标准版怎么查应收应付款
  • 设备购入后又退出怎么办
  • 上年结转库存现金会计分录
  • 银行承兑汇票进行贴现理财
  • 企业捐赠支出计入什么科目
  • 文化建设费税率
  • 合并报表两种方法
  • 劳务公司到外地需要交的税
  • 在建的工程收到的发票
  • 暂估成本的账务处理分录
  • 进口产品内销如何交税
  • 低预算高要求
  • 公司领导培训费用标准
  • 房地产企业预缴增值税
  • 商贸企业固定资产可以一次性扣除吗?
  • win8 重装系统
  • windowsxp教程
  • use crt secure
  • mac系统自带的杀毒软件
  • mac如何更换系统
  • 电脑桌面图标有虚影怎么回事
  • xp电脑注册表怎么打开
  • CentOS 6.x 到 CentOS 7 的升级过程
  • 打开win七
  • windows全局搜索快捷键
  • win8电脑怎么设置定时开机
  • linux系统查询进程
  • win8.1无线
  • windows10 2021预览版
  • android判断横竖屏
  • js原始值有哪些
  • jquery easyui插件
  • python中的字符型
  • angular ngshow
  • js画矩形
  • jquery mobile开发环境
  • javascript indexOf函数使用说明
  • python中getattr函数例子
  • python3 heapq
  • 干部试用期满转正考察谈话提纲
  • 税务局落实双拥工作情况报告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设