nodejs中request库使用HTTPS代理的方法


Posted in NodeJs onApril 30, 2019

正在尝试改用NodeJS编写爬虫,http请求库选择了 request ,用起来还是挺简单的。

现在有个需求,需要用Fiddler抓包我发出去的请求,以便和浏览器发出去的包进行对比。

因为需要解密HTTPS报文,需要让node要么忽略证书安全,要么信任Fiddler的CA证书。

网上找了一圈,总结如下:

方法一:设置环境变量

  • 设置环境变量NODE_TLS_REJECT_UNAUTHORIZED=0
  • 即"不拒绝未认证的证书"
  • 但是直接修改系统环境变量比较危险,因为会影响到所有nodejs的程序;比较稳妥的办法是脚本中调用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; 这样仅对本进程生效

方法二:每请求单独设置忽略证书安全

  • 上述方法还是有一定风险,因为当前nodejs进程都受此全局设置影响
  • 可以在request的options中添加rejectUnauthorized: false选项来针对单个请求忽略证书检查
  • 当然也可以用request.defaults直接设置默认选项
const request = require("request").defaults({
   proxy: "http://127.0.0.1:8888",
   rejectUnauthorized: false,
 })
 request.get("https://www.baidu.com").on("response", console.log)

方法三:使用Fiddler的CA证书

  • 这个方法是最稳妥的,不会让你的子系统产生任何溢出影响
  • 首先在Fiddler内把其根证书导出到桌面:Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop
  • 导出的文件是个.cer证书,经测试nodejs不直接支持,需要用openssl转换成PEM格式(我的openssl是cygwin装的)
  • openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out fiddler.pem
  • 把转换出来的fiddler.pem放到你的程序能访问的位置
  • 使用ca选项来指定CA证书
const request = require("request").defaults({
   proxy: "http://127.0.0.1:8888",
   ca: require("fs").readFileSync("path/to/fiddler.pem", {encoding: "utf-8"}),
 })
 request.get("https://www.baidu.com").on("response", console.log)

另外:request当然也支持自签名证书,不过我暂时没这方面需求,就没继续摸索了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 #NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 #NodeJs
Nodejs实现用户注册功能
Apr 14 #NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 #NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 #NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 #NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 #NodeJs
You might like
php目录管理函数小结
2008/09/10 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
违反工作纪律检讨书
2014/02/15 职场文书
医药营销个人求职信
2014/04/12 职场文书
生日宴会策划方案
2014/06/03 职场文书
客户答谢会活动方案
2014/08/31 职场文书
学生个人总结范文
2015/02/15 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
品德与社会教学反思
2016/02/24 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
解决Oracle数据库用户密码过期
2022/05/11 Oracle
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers