在另一个网站上使用登录cookie c#

时间:2013-10-15 04:54:10

标签: c# .net cookies webrequest login-script

我正在尝试从登录表单获取cookie,将其保存在我的cookie容器cookieJar中,并在下一个请求中使用。 cookie被正确保存(至少,计数显示适当的数量,但在进行webrequest3时,我没有获取内容,使页面未登录。

P.P:我读了相关的帖子,但是主要内容并没有完全实现(很明显),而其他人完全像我一样,所以我不知所措。

 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();

编辑:

我和fiddler一起得知当从资源管理器登录时,在webrequest1之后自动进入页面,不保存任何cookie,但似乎使用了一些服务器端检查,如果你没有进入该页面在webrequest3之前,webrequest2无法识别您的登录信息。 所以,在webrequest3之前创建另一个webrequest,就可以了。

1 个答案:

答案 0 :(得分:2)

尝试使用以下内容。

  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;

相关问题