ktty1220 / cheerio-httpcli

iconvによる文字コード変換とcheerioによるHTMLパースを組み込んだNode.js用HTTPクライアントモジュール
MIT License
262 stars 28 forks source link

TLS1.2での通信ができない #26

Closed chiroruxx closed 6 years ago

chiroruxx commented 6 years ago

TLS1.2での通信しか受け付けていないサイトへのスクレイピングを実行すると、結果のresponseがnullになり、エラーの内容もスクレイピングしようとしたURLしかありません。

https://github.com/ktty1220/cheerio-httpcli/blob/ecb21f2bf2983bf9d45bd3d00e669ee9cba3da25/lib/client.js#L538

ここで規制されているようなのですが、なぜ規制されているのかよくわからなかったので、Issueにしています。

私が思いつく対応は以下なのですが、何かしらの対応は可能でしょうか。。。

  1. SecureOptions を指定できる
  2. スクレイピング先のサーバーがTLS1.2にしか対応していない場合、その旨のエラーを返す(requestライブラリから返却されたstderrの内容)

OSS初心者で恐縮ですが、よろしくお願いします。

ktty1220 commented 6 years ago

このsecureOptionsですが、かなり昔(何年か前)にこのオプションを設定しないとアクセスできないページがあったために設定したような気がします(ぶっちゃけよく覚えていない)。

ただ、今回のケースのようにこのオプションのせいで逆にアクセスできないページがあるということなので、agentOptionsとして個別に設定できるようにしました。

agentOptionsは直接requestモジュールに渡されます( https://github.com/request/request#using-optionsagentoptions )。 デフォルトは空なので、今後は特に何もしなくてもTLS1.2のみ受け付けるサーバーにもアクセスできるようになります。

本日中には0.7.2としてこの変更を反映したバージョンをnpmに登録します。

お知らせありがとうございます。:+1:

ktty1220 commented 6 years ago

0.7.2をリリースしました。 一旦こちらのIssueは閉じますが、問題が継続するようであればお知らせください。