問題タブ [cookiecontainer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - HttpWebrequest/WebClient/HttpClient/CookieContainer バグ? レスポンス URI にパスが含まれていない場合、Cookie を追加しません
C# (WebClient/HttpWebRequest) を使用して WordPress 管理パネルにログインしようとしていました。
に POST リクエストを送信し/wp-login.php
ます。次のような Cookie で応答します。
また、次の場所にもリダイレクトされ/wp-admin/
ます。Location: http://109.120.169.99/wordpress/wp-admin/
問題は、2 番目の Cookie (with path=/wp-admin
) が CookieContainer に追加されないため、ログインに失敗することです。
HttpWebRequest ソース コードとhttp://referencesource.microsoft.com/#System/net/System/Net/_CookieModule.cs (OnReceiveHeaders) を調べたところResponseUri
、すべての Cookie に使用されていることがわかりました。
応答 uri を使用して手動で Cookie を追加しようとしたところ、パスが無効であるという例外が発生しました。その後、私はこの答えCookieException with CookieContainer: The 'Path' part of the cookie is invalidを見つけました: CookieContainer に追加するとき、Uri は Cookie からのパスと一致する必要があると書かれています。
結局、AllowAutoRedict を無効にし (手動で処理)、これらの Cookie を手動で追加しました。
これが私のコードです:
ウェブクライアント:
.NET 4.5 HttpClient も使用してみましたが、同じ結果になりました (下で HttpWebRequest も使用していると思います)。
私は何か間違ったことをしていますか、それとも HttpWebRequest/CookieContainer のバグですか?
誰かがテストしたい場合の便宜のために、完全なソースコードを次に示します: https://gist.github.com/AlexP11223/5c176972426605ee2112 (私のテスト Web サイトとログイン/パスワードも機能するはずです)
そしてフィドラーのログ:
- http://1drv.ms/1qyAgGi — ウェブブラウザ (Chrome)、この Cookie を追加します
- http://1drv.ms/1kqsLDI — Web クライアント
- http://1drv.ms/1kqsC2Y — HttpClient
c# - 重大な CookieContainer バグ?
ここで何かが足りないのですか、それとも CookieContainer のバグですか?
コンテナに 3 つの Cookie を追加してから、2 つの URL に対して GetCookieHeader 関数を呼び出します。
問題は、返されたヘッダーが「Cookie2=2」のみであるため、例外をスローする最後のアサーションです。Cookie1 Cookie が省略されている理由がわかりません。RFC6265 によれば、上記の最初のアサーションと同様の 2 つの Cookie を返す必要があります。
いくつかのコメント:
Cookie はすべてコンテナー内にあるため、問題は追加ではなく、GetHeader 関数です。
4、5 などの Cookie を追加しても、この動作は変わりません。最後に追加された Cookie に一致するパスのみが、ベース パスの Cookie を含みます。
パス内のすべての「a」を削除し、「/」、「/0/」、および「/1/」のみを 3 つの Cookie と「 http://test.com/1/list」のパスとして使用すると、動作が変わります。およびアサーション URL の「 http://test.com/0/list 」)。その後、すべてのアサーションが成功します。「a」でも同じ動作が期待できます。
PS: 仕様から関連する部分を追加させてください:
次の条件の少なくとも 1 つが保持される場合、要求パス パスは特定の cookie パスと一致します。
- cookie-path と request-path は同一です。
- cookie-path は request-path のプレフィックスであり、cookie-path の最後の文字は %x2F ("/") です。
- cookie-path は request-path のプレフィックスであり、cookie-path に含まれていない request-path の最初の文字は %x2F ("/") 文字です。
だから私にはこれは明らかにバグです...?
c# - Cookie を httpwebrequest に渡す
HttpWebRequest
プロパティを使用せずにCookie を渡すことは可能HttpWebRequest.CookieContainer
ですか?
何らかの理由で、を含む一部のオブジェクト プロパティにアクセスできませんHttpWebRequest.CookieContainer
。HttpWebRequest
クラスとクラスにアクセスできますCookieContainer
。
c# - cookieContainer HttpWebrequestからWebrowserにWebサイトをロードするにはどうすればよいですか
Httprequest で Web サイトにログインしようとすると、いくつかの情報が返されます。そして、Cookie レスポンスを保存します。ログインの成功をどのように知ることができますか? Cookie によって新しいフォームで Web サイトを読み込もうとしましたが、ログインしていません。だから私を助けてくれませんか...これは私のコードです:
ログインのコード:
そして、Cookie リターンでウェブサイトをロードするためのこのコード
助けてください。私はとても努力していますが、成功することはできません。
c# - C# での CookieContainer() のコンテンツへのアクセス
わかりました、私はタオルを投げて、知っているかもしれない人々に目を向けました. 私はネットを検索し、いくつかの例を試しましたが、Cookie コンテナーからデータを引き出すことに近づいていません。
コードをデバッグすると、次の変数のエントリ/値を確認できます: CookieContianer > 非パブリック メンバー > m_domainTable > {ドメイン URI} > 値 > エントリのリスト
そこに JSESSIONID というエントリがあります。私がやりたいのは、その特定のエントリを取得して、割り当てられた値を使用できるようにすることだけです。
どうすれば簡単に取り組めるのか、誰かが光を当てることができますか?
どうもありがとう。
==== リクエストの作成方法の例 (RequestItem は別のメソッドから渡されることに注意してください):
c# - Properties.Settings.Default CookieContainer が再起動されますが、なぜですか?
シンプルな winform アプリケーションがあります。最初の実行では、ユーザーが Web サイトにログインできるようにログイン画面が実行されます。次のように成功すると、セッション Cookie が保存されます。
それが完了すると、ログイン フォームが非表示になり、新しいメイン フォームが実行されます。このメインフォームでは、cookiecontainer が読み取られ、再度保存されます。
魅力のように機能します。セッション Cookie はまだそこにあり、すべて問題ありません。その後、次のように Cookie を使用して、Web サイトに対して新しいリクエストが行われます。
正常に動作します。リクエストが完了し、特定のユーザー関連データが文字列で見つかりました。
しかし、プログラムを再起動すると、奇妙なことが起こります。
プログラムが開始する前に、このコードを実行して、Cookie を調べて初回実行を確認します。
実際、最初の実行後は でProperties.Settings.Default.cookies
はないnull
ため、メイン フォームは によって開始されProgram.cs
ます。
奇妙なことに、今回はCookieContainerProperties.Settings.Default.cookies
オブジェクトを返します... Cookie はありません。
私のアプリケーション設定は、初回実行時にのみ開かれるログインフォームにのみ保存されるため、その理由はわかりません。このような奇妙なことをしている cookiecontainers を経験した人はいますか? おそらく私のコードで何かをチェックする必要がありますか? 乾杯。
c# - これは CookieContainer のバグですか?
私がやっていること:
私は「webscraper」(マルチスレッド) を開発しています。
ページからデータを抽出する前にフォームを送信する必要があるため、レイアウトは次のようになります。
- example.com/path/doc.jsp (私のデータ) への GET リクエスト。
- ドキュメント ソースに確認フォームが存在するかどうかを確認します。はいの場合はステップ 3 に進み (データが存在しないため、最初にフォームを送信する必要があります)、そうでない場合は戻ります (送信するフォームがなく、データがここにあるため)。
- example.com/path/sub/other.jsp への GET リクエスト (必要なキー値)。
- example.com/path/submit.jsp への POST 要求 (値の送信)。
- POST リクエストからの応答を確認し、OK の場合は 6 に進み、そうでない場合は 1 に戻ります。
- example.com/path/doc.jsp への GET リクエスト (再び私のデータ。フォームを送信したため、私のデータが表示されます)。
POST リクエスト (ステップ 4) からの応答でステップ 1 に戻るように指示された場合を除いて、すべて正常に動作しています。
問題:
フォーム内の値の 1 つを Cookie から抽出する必要があるため、GetCookies()
関数を使用しますが、前述のように、応答でステップ 1 に戻るように指示された場合、すべての要求 (GET と POST の両方) )その後、Cookieが欠落しています(そして奇妙なものが追加されました)。以下の画像を参照してください。
- 最初の呼び出しは、私のデータがある doc.jsp への GET 要求です。
- 2 番目の呼び出しは、確認フォームが doc.jsp ソース コードに存在するため、other.jsp 要求です。
- 3 番目の呼び出しは、すべての値を送信するときです。
- 4 回目の呼び出しは、doc.jsp への GET 要求です。これは、送信フォームの応答 (3 回目の呼び出し) でプロセスを繰り返すように指示されたためです。基本的に、4º ~ 6º の呼び出しは 1º ~ 3º と同じですが、cookie が fu**ed されています。
私のコード:
主なプログラム:
私の環境:
- Visual Studio Professional 2013 を使用しています。
- ターゲット フレームワークは .NET Framework 4.5 です。
- プラットフォーム x86 (デバッグ)。
- WebClientEx は、Cookie を操作するための WebClient の拡張バージョンです。ここから入手 PasteBin。
BugFix_CookieDomain()
(この質問から)を実装しようとしましたが、その修正を行っても、この問題は引き続き発生します。 すべての URL に http:// プレフィックスが含まれています。
Fiddler を使用してリクエスト情報を確認しました。
- 英語は私の母国語ではありません... '-'