2013-09-06 11 views
34

私のアプリケーションからWebサイトにログインしようとしています。 私がしたこと:HttpWebRequest:CookieContainerにCookieを追加 - > ArgumentException(Parametername:cookie.Domain)

最初に、ブラウザがFiddlerの認可プロセスをどのように行うのかを理解しました。 POST要求がどのように構築されているかを調べ、再構築しようとしました。 ブラウザが4つのクッキー(Googleアナリティクス)を送信し、私はそれらを設定しようとしました:

CookieContainer gaCookies = new CookieContainer(); 
gaCookies.Add(new Cookie("__utma", "#########.###########.##########.##########.##########.#")); 
gaCookies.Add(new Cookie("__utmb", "#########.#.##.##########")); 
gaCookies.Add(new Cookie("__utmc", "#########")); 
gaCookies.Add(new Cookie("__utmz", "#########.##########.#.#.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)")); 

(ちょうど#でオリジナルクッキーのデータを置き換え)

をそれから私は、デバッガでコードを経て、できるだけ早く最初gaCookies.Addが実行されるように、アプリケーションは、私はこれが起こる理由を知りたい

System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain 

で停止します。 Cookieのコンストラクタはドメインを必要とせず、この値をどこで取得できるのかわかりません。

あなたの誰かが私にこれを手伝うことができれば、とても素晴らしいことでしょう。
私はウェブデベロッパーでも、ウェブサイトの専門家でもないので、私はそれについて詳しくは分かりません。
"短くて​​素早い答え"がなければ、これについて学ぶことができる素晴らしい情報源がありますか?

答えて

63

CookieContainerは、異なるウェブサイトに複数のCookieを保持できるため、各Cookieを各Webサイトにバインドするラベル(ドメイン)を提供する必要があります。そのような個々のクッキーをインスタンス化する際に、ドメインを設定することができます。

Cookie chocolateChip = new Cookie("CookieName", "CookieValue") { Domain = "DomainName" }; 

にドメインをつかむための簡単な方法は、(あなたがすでに1を使用していない場合)Uriを作るためには、あなたのターゲットURLとセットが含まれていますUri.Hostプロパティを使用しているCookieのドメイン。

CookieContainer gaCookies = new CookieContainer(); 
Uri target = new Uri("http://www.google.com/"); 

gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host }); 
+3

このクラスは、自己文書化であり、スタックオーバーフローの質問である必要はありません。少なくともマイクロソフトは正しい方向に1歩進んだが、一般的な「エラーが発生しました」というメッセージは表示されませんでした。 – Brain2000

関連する問題