nodejsでrequestライブラリはHTTPSエージェントを使用しています.


ツールと資料
  • QQ群-Javascript高級爬虫類-作者の自己建築群、参加を歓迎します.
  • awesome-java-crawler-作者が収集した爬虫関連ツールと資料
  • 本文
    NodeJSに変えて爬虫を編むことを試みています.httpライブラリはrequestを選んでいます.使うのは簡単です.今は必要なものがあります.ブラウザから送られたカバンと比較するために、Fiddlerで私が送った要求を追跡してください.FiddlerでHTTPS報文を解読する必要があるので、nodeを有効にするか、証明書の安全を無視するか、またはFiddlerのCA証明書を信頼する必要があります.ネットで一周探しましたが、以下のようにまとめられています.
    方法1:環境変数の設定
  • 環境変数NODE_を設定します.TLS_REJECT_UNAUTHORIZED=0
  • すなわち「未認証証明書を拒否しない」
  • しかし、システム環境変数を直接修正するのは危険です.すべてのnodejsのプログラムに影響を与えます.比較的妥当な方法は、シナリオ中の呼び出しprocess.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;であり、このように本プロセスに対してのみ有効となる
  • である.
    方法2:要求ごとに個別に証明書のセキュリティを無視する
  • 上記の方法はまだ一定のリスクがあります.現在の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)
  • を設定することもできます.
    方法3:Fiddlerを使用するCA証明書
  • この方法は最も妥当であり、あなたのサブシステムにオーバーフローの影響を与えない.
  • まずFiddler内でそのルート証明書をデスクトップにエクスポートします.Tools->Options->HTTPS->アクション->Export Root Cot Citifeat to Deskytop
  • で導出されたファイルは.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はもちろん自署証明書もサポートしていますが、私はしばらくこのような需要がないので、引き続き模索していません.