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服务器(3):代码模块化
Dec 18 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
nodejs基础知识
Feb 03 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
php修改时间格式的代码
2011/05/29 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
php实现等比例压缩图片
2018/07/26 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
prototype 学习笔记整理
2009/07/17 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
python在每个字符后添加空格的实例
2018/05/07 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
青年标兵事迹材料
2014/08/16 职场文书
运动会稿件100字
2014/09/24 职场文书
运动会加油稿20字
2014/11/15 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
python状态机transitions库详解
2021/06/02 Python
java解析XML详解
2021/07/09 Java/Android
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
4种方法python批量修改替换列表中元素
2022/04/07 Python