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中SSL服务的性能
Jul 15 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 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取进制余数函数代码
2012/01/19 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
整理Python最基本的操作字典的方法
2015/04/24 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python反射的用法实例分析
2018/02/11 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
详解python里的命名规范
2018/07/16 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python async with和async for的使用
2019/06/20 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
Shell如何接收变量输入
2016/08/06 面试题
工作自我评价怎么写
2014/01/29 职场文书
售后客服个人自我评价
2014/09/14 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android