最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 21:57:40
文档

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

nodejs中request库使用HTTPS代理的方法:正在尝试改用NodeJS编写爬虫,http请求库选择了 request ,用起来还是挺简单的。 现在有个需求,需要用Fiddler抓包我发出去的请求,以便和浏览器发出去的包进行对比。 因为需要解密HTTPS报文,需要让node要么忽略证书安全,要么信任Fiddler的CA证书
推荐度:
导读nodejs中request库使用HTTPS代理的方法:正在尝试改用NodeJS编写爬虫,http请求库选择了 request ,用起来还是挺简单的。 现在有个需求,需要用Fiddler抓包我发出去的请求,以便和浏览器发出去的包进行对比。 因为需要解密HTTPS报文,需要让node要么忽略证书安全,要么信任Fiddler的CA证书

正在尝试改用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中request库使用HTTPS代理的方法

    nodejs中request库使用HTTPS代理的方法:正在尝试改用NodeJS编写爬虫,http请求库选择了 request ,用起来还是挺简单的。 现在有个需求,需要用Fiddler抓包我发出去的请求,以便和浏览器发出去的包进行对比。 因为需要解密HTTPS报文,需要让node要么忽略证书安全,要么信任Fiddler的CA证书
    推荐度:
    标签: 代理 js https
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top