Closed nnn-revo2012 closed 4 years ago
もう読んでるかもしれませんが、configのbrowserNumはログインかブラウザーのCookie選択だとわかったので文書を削除しました。
で、気になったのはCookieGetter.csのcopyUserSessionの中で
cc.Add(TargetUrl, new Cookie(c.Name, c.Value)); etc...
とやってますが、これだとホスト(TargetUri)毎の登録になってしまうのでは?スマートじゃないけど以下のように直接パスとドメインを指定してクッキー登録すればいいんじゃないかと思うのですが。
cc.Add(new Cookie(c.Name, c.Value, "/", ".nicovideo.jp"));
ご指摘をいただきありがとうございます。 ServicePointManager.SecurityProtocolにつきましては、そちらが問題になる可能性は十分にあるかと思います。 Cookieの登録の件とともにhttps://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/1e0b47bb3be073170fec48de4052b27681189c85 (ver0.88.03)にて修正してみました。
https://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/1e0b47bb3be073170fec48de4052b27681189c85 (ver0.88.03) 拝見いたしました。自分の環境(Windows10)では0.87.88以降全然問題なかったのですが、今回の一斉アップデートのためサポートが終わったOS(Vista、Windows7)あたりのユーザーに影響がでたんだと思います。 Cookieの件と合わせてエラーになってたユーザーさんの報告待ちですね。
ご確認いただきありがとうございます。 ブラウザにより問題が発生してしまう件につきましても、やはりツール側のCookieの扱いが原因ではないかと思います。 うまく改善できていれば幸いです。ご指摘をいただき感謝いたします。
ServicePointManager.SecurityProtocol はアプリ内で指定後全てのHttpWebRequest/WebClient/HttpClientに対して有効になるので、アプリの最初(ネットにアクセスする前)に一度か、明示するなら全てのHttpWebRequest/WebClient/HttpClientの前に設定すると良いと思います。
Cookie関係もテストしてみたのですが、以下のようになるようなので特にWebからCookie取得するときは注意すべきだなと思いました。
//targetUrlにNameがあれば、/ .nicovideo.jp は返さない
cc.Add(new Cookie("user_session", "abcdefgh", "/", ".nicovideo.jp"));
cc.Add(targetUrl, new Cookie("user_session", "dummy"));
var c1 = cc.GetCookies(targetUrl)["user_session"];
// c1 user_session=dummy
//同じNameの場合は上書き
cc.Add(new Cookie("user_session", "abcdefgh", "/", ".nicovideo.jp"));
cc.Add(new Cookie("user_session", "dummy2", "/", ".nicovideo.jp"));
var c2 = cc.GetCookies(targetUrl)["user_session"];
// c2 user_session=dummy2
問題なさそうなので数日でcloseいたします。
ご指摘いただきありがとうございます。 ServicePointManager.SecurityProtocolの設定につきましてはProgram.cs内に移動いたしました。(https://github.com/guest-nico/nicoNewStreamRecorderKakkoKari/commit/444a091529476f6a0ce31688866a0f9697f22925) Cookieの扱いにつきましても、今後、Cookieに関する修正を行う際は注意していきたいと思います。
問題を孕んでいた部分のご指摘をいただき感謝申し上げます。
getPageSource()の中で「ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;」としてますが、これだと古いOSでTls12で通信できなかった場合エラーになると思います。Ssl3やTlsは要らないかもしれませんが。
NET4.0以前の場合
が良いのではないでしょうか?