1

JSESSIONID Cookie に依存する基本認証を使用する REST サービスに HttpWebRequest を使用しています。そのセッションを再利用するには、その Cookie を WebBrowser コントロールに渡す必要がありますが、その Cookie をブラウザの Cookie ストアに渡すことができる解決策が見つかりませんでした。

何か方法はありますか?私が今考えることができる唯一の方法は、一種のブルートフォースである Naviagate(url, null, MANUALLY_CONSTRUCTED_HEADER) を使用することです。

はい、実際にこの種のアクションには WebBrowser を使用する必要があります。

助言がありますか?

4

3 に答える 3

5

もう1つの考えは、JavaScriptを介してCookieを追加できる可能性があるということです。これを実行できるはずです(ブラウザコントロールでIsScriptEnabledがtrueの場合):

private void setCookie(string name, string value, string path = "", string domain = "", bool isSecure=false, string expires = "")
{
        var sb = new StringBuilder();
        sb.AppendFormat("document.cookie = '{0}=\" + escape(\"{1}\")", name, value);
        if (!String.IsNullOrEmpty(expires))
            sb.AppendFormat(";expires=\"{0}\"", expires); // should be a GMTString
        if (!String.IsNullOrEmpty(path))
            sb.AppendFormat(";path=\"{0}\"", path); 
        if (!String.IsNullOrEmpty(domain))
            sb.AppendFormat(";domain=\"{0}\"", domain);
        if (isSecure)
            sb.Append(";secure'");
        var cookieJs = sb.ToString();
        Debug.WriteLine(cookieJs);
        webBrowser.InvokeScript(cookieJs);
}
于 2012-11-13T19:54:45.400 に答える
1

初めて URL で JSESSIONID を送信して問題を解決し、有効な JSESSIONID Cookie を取得しました。しかし、これは普遍的なアプローチではありません。

アプリケーションリソース内にネストされた単純なWebページに移動するソリューションがあると思います。その後、ブラウザーは javascript 関数を呼び出すことができます。これにより、パラメーターによって渡された Cookie が設定されます。Microsoft が (document.cookie を無効にすることによって) そのようなアプローチに干渉しない場合、これは解決策になる可能性があります (私はまだテストしていません)。

于 2012-11-08T13:26:34.290 に答える
0

LoadCompleted イベントでもスクリプトの呼び出しで例外が発生する場合は、これを試してください。

webBrowser.InvokeScript("eval", "document.cookie = \"COOKIE_NAME=" + COOKIE_VALUE + "; Path=/; Domain=" + WEB_URL.DnsSafeHost + " ;\";");

これは LoadCompleted イベントで私にとってはうまくいきました。Cookie を機能させるには、2 回ロードする必要があることに注意してください。LoadCompleted では、Cookie が挿入されますが表示されませんが、2 回目の読み込みでは問題なく動作します。

于 2015-09-16T06:56:52.230 に答える