1

最初にログインする必要があるWebページを表示しようとしています。HttpWebRequest / Responseオブジェクトを使用して、バックグラウンドでセッションCookieと承認Cookieを収集することにより、ロギングを部分的に実行しています。

ログイン後、HttpWebResponseオブジェクトがWebBrowserコントロールを介してユーザーに表示するHTMLページを返すので、目的のWebページにアクセスするための適切なセッション/承認Cookieのセットがあることがわかります。

CookieContainerに関連するCookieが適切に入力されたら、WebBrowser.DocumentTextプロパティを、表示しようとしているWebアドレスへのGETコマンドを含む準備されたHTMLに設定します。準備されたHTMLをレンダリングしようとするとブラウザがポップアップし、Cookieの欠落に関連するサーバーエラーが発生すると思います。

DocumentTextプロパティを呼び出す前にWebBrowser.Document.Cookieを設定しようとすると、表示されているデバッガーで、Cookieプロパティを "cookName = cockValue;cockName=の形式の文字列に設定しようとした後も常にnullのままであることがわかります。 CookValue;"。

Cookieプロパティが渡したCookie文字列を拒否するのはなぜですか?これはHttpOnlyCookieと関係がありますか?私のクッキー文字列は正しくフォーマットされていませんか?間違ったタイミングでCookieプロパティを設定しようとしていますか?

WebBrowser.Navigate( "about:blank")呼び出しを実行しました。これは、WebBrowserオブジェクトを適切に初期化するために必要と思われます。

4

1 に答える 1

2

これが私のために働いたものです:

  using System.Runtime.InteropServices;

  [DllImport("wininet.dll",CharSet = CharSet.Auto, SetLastError = true)]
  public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

  //'CookieCollection' was populated using HttpWebRequest/Response calls
  int i=0;
  InternetSetCookie("https://www.myurl.com/", null, CookieCollection[i++].ToString() + "; expires = Sun, 01-Jan-2013 00:00:00 GMT");
  //repeat for however many cookies you've got

  browser.Navigate("https://www.myurl.com/tools/..../Index.aspx?t=someValue", true);
  //or
  browser.DocumentText = someHtml;

ノート:

1)「expires」値を含めないと、「true」を返してもInternetSetCookie呼び出しは機能しませんでした。「expires」値は、セッションのみのCookieではなく、Cookieを永続的なCookieに変換します。

2)'browser.Navigate( "about:blank");' 必須ではないようです。私はこの声明の有無にかかわらず私のページにたどり着くことができました。

3)browser.Document.Cookieは、私が何を投げても、私には機能しませんでした(常にnull)。そして、InternetSetCookieの3番目のパラメーターに渡される文字列を含め、さまざまな文字列を試しました。

于 2012-05-05T22:17:30.917 に答える