0

ログインフォームから Cookie を取得し、Cookie コンテナ cookieJar に保存して、次のリクエストで使用しようとしています。Cookie は正しく保存されています (少なくとも、カウントは適切な量を示していますが、webrequest3 を実行すると、コンテンツが取得されず、ログインしていないページが取得されます。

PD: 関連する投稿を読みましたが、メジャーは完全には実装されておらず (明らかに)、他のものは私とまったく同じように動作しているので、途方に暮れています。

 CookieContainer cookieJar = new CookieContainer();
        //The First Req

        HttpWebRequest webRequest1 = (HttpWebRequest)WebRequest.Create("url1");
        webRequest1.Method = "GET";
        webRequest1.ContentType = "text/html";
        webRequest1.KeepAlive = true;
        webRequest1.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";
        webRequest1.Host = "url1";
        webRequest1.CookieContainer = cookieJar;
        webRequest1.ContentType = "text/html";
        HttpWebResponse webResponse;
        webResponse = (HttpWebResponse)webRequest1.GetResponse();
        Console.WriteLine(cookieJar.Count.ToString());
        StreamReader reader = new StreamReader(webResponse.GetResponseStream());

        // Read the content fully up to the end.
        string responsereq = reader.ReadToEnd();

        // Clean up the streams.
        reader.Close();
        webResponse.Close();
        Console.ReadKey();

        //Second Request
        HttpWebRequest webRequest3 = (HttpWebRequest)WebRequest.Create("url2");
        webRequest3.Method = "GET";
        webRequest3.KeepAlive = true;
        webRequest3.UserAgent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";
        webRequest3.Host = "url2";
        webRequest3.CookieContainer = cookieJar;
        webRequest3.ContentType = "text/html";


        Console.WriteLine(cookieJar.Count.ToString() +"CookieJar");
        Console.ReadKey();
        webResponse = (HttpWebResponse)webRequest3.GetResponse();
        StreamReader reader3 = new StreamReader(webResponse.GetResponseStream());

        // Read the content fully up to the end.
        string responseFromServer = reader3.ReadToEnd();
        Console.WriteLine(responseFromServer);

      // Clean up the streams.
      webResponse.Close();

Console.ReadKey();

編集:

エクスプローラーからログインすると、webrequest1の後に自動的にページに入り、Cookieを保存しないが、webrequest3の前にそのページに入らない場合、サーバー側のチェックを使用しているようです、webrequest2 はあなたのログインを認識しませんでした。したがって、webrequest3 の前に別の webrequest を作成して、トリックを実行します。

4

1 に答える 1

3

以下で試してみてください。

  1. まず、最初のリクエストのレスポンスから Cookie を取得します。

    HttpWebResponse webResponse;
    webResponse = (HttpWebResponse)webRequest1.GetResponse();
    

    CookieContainer cookieJar= new CookieContainer();

       foreach (Cookie cook in webResponse .Cookies)
        {
            cookieJar.Add(cook);
        }
    
  2. 後続のリクエストに渡します。

    webRequest3.CookieContainer = cookieJar;

于 2013-10-15T06:11:23.910 に答える