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框架Express的模板视图机制分析
Jul 19 NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 NodeJs
nodejs中操作mysql数据库示例
Dec 20 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 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 COOKIE及时生效的方法介绍
2014/02/14 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
详解Django中的权限和组以及消息
2015/07/23 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
python表格存取的方法
2018/03/07 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
五水共治一句话承诺
2014/05/30 职场文书
医生个人年终总结
2015/02/28 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
python实现高效的遗传算法
2021/04/07 Python
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL