2

プログラム (c#) を Web サイトにログインさせると、正しいバッファリングされた Cookie 情報が取得されます。それでも、ログインの背後にある正しいデータを取得したいときに、401、セッションがタイムアウトしました。

だから私は、ウェブサイトがそのクッキー情報を取得できないはずだと考えました。ウェブサイトがそれを取得できるように保存する方法がわかりません。

        WebRequest req = WebRequest.Create(Url);
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(Gegevens);
        req.ContentLength = bytes.Length;
        using (Stream os = req.GetRequestStream())
        {
        os.Write(bytes, 0, bytes.Length);
        }
        WebResponse resp = req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];

cookieHeader には、正しい情報が含まれています。前もって感謝します。

4

2 に答える 2

3

CookieContainerWeb リクエストにを割り当て、これを次のリクエストにも同じように使用する必要がありCookieContainerます。

参照については、MSDN を参照してください

(アプリケーションを閉じたときに Cookie を保持したい場合) から Cookie のリストを取得し、CookieContainerこれらをシリアル化することができます。アプリケーションを開くと、CookieContainer.

于 2012-11-27T15:24:19.660 に答える
1

あなたが提供したコメントから、私は推測を危険にさらし、あなたがあなたのログインクッキーをあなたの次のものに適切に追加していないと言いますWebRequest。オブジェクトでのCookieの処理WebRequestは少し難しいので、Cookieの解析が組み込まれているHttpWebRequestを使用することをお勧めします。HttpWebResponseあちこちで数行のコードを変更するだけです。

リクエストの作成(質問で同じ例を使用)

CookieContainer cookies = new CookieContainer();

// When using HttpWebRequest or HttpWebResponse, you need to cast for it to work properly
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = cookies;
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";

byte[] bytes = Encoding.ASCII.GetBytes(Gegevens);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}

// Cast here as well
using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
    // Code related to the web response goes in here
}

現在、Cookie情報はCookieContainerオブジェクトに保存されています。ログインを検証するために、後でコードで再利用できます。必要がなければ、このCookie情報をディスクに書き込む必要はありません。

Cookie情報を使用してリクエストを作成する (上記とほぼ同じですが、POSTデータを追加せず、GETリクエストを使用しています)

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = cookies; // This is where you add your login cookies to the current request
req.Method = "GET";

using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
{
    // Code related to the web response goes here
}

うまくいけば、これはあなたを正しい軌道に乗せるでしょう:)

于 2012-11-27T15:33:53.243 に答える