4

Webbrowser コントロールを使用して Web サイトを開き、Cookie を cookieContainer に保存し、後で HTTPwebrequest を使用してフォワード ブラウジング ページなどを処理します。

検索を行って 100 ページが返されると、最初のページで ABC という名前の Cookie が保存され、これを cookiecontainer に追加して次のページに移動すると、問題が発生します。 ABC にはいくつかの値が与えられていますが、cookiecontainer に 2 つの同じ Cookie があり、次のページに移動すると、最初の Cookie を取得してすべてが台無しになるため、機能しません。

これを解決するには?

HttpWEBREQUEST 関数:

 public string getHtmlCookies(string url)
    {
        string responseData = "";
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Accept = "*/*";
            request.AllowAutoRedirect = true;
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
            request.Timeout = 30000;
            request.Method = "GET";
            request.CookieContainer = yummycookies;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                foreach (Cookie cookie in response.Cookies)
                {
                    string name = string.Empty;
                    name = cookie.Name;
                    string value = cookie.Value;
                    string path = "/";
                    string domain = "www.example.com";
                    yummycookies.Add(new Cookie(name.Trim(), value.Trim(), path, domain));

                }


                Stream responseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(responseStream);
                responseData = myStreamReader.ReadToEnd();
            }
            response.Close();


        }
        catch (Exception e)
        {
            responseData = "An error occurred: " + e.Message;
        }

        return responseData;

    }
4

1 に答える 1

6

メソッドを使用できますSetCookies

var container = new System.Net.CookieContainer();
var uri = new Uri("http://www.example.com");
container.SetCookies(uri,"name=value");
container.SetCookies(uri,"name=value1");

を呼び出すGetCookies(uri)と、が付いた単一のCookieが提供されValue=value1ます。

そしてあなたの場合、コードは次のようになります

var uri = new Uri("http://www.example.com");
yummycookies.SetCookies(uri, response.Headers[HttpResponseHeader.SetCookie]);    
于 2012-05-23T18:19:52.790 に答える