有没有办法使用WebClient从受密码保护的位置而不是Httprequest获取登录cookie?

时间:2012-12-31 02:25:38

标签: c# webclient

我目前正在使用以下代码来获取该网站的Cookie:

      bool IsLoginSuccessful = false;
  try
  {
    //Get Token and Authorization URL
    HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("https://updates.site.com/download");
    wr.AllowAutoRedirect = true;
    WebResponse response = wr.GetResponse();
    response.Close();
    string data = response.ResponseUri.OriginalString;
    string ssoToken = data.Split('=')[1];
    string authData = String.Format("ssousername={0}&password={1}&site2pstoretoken={2}", username, password, ssoToken);
    string ssoServer = response.ResponseUri.Scheme + "://" + response.ResponseUri.Host;
    string ssoAuthUrl = "sso/auth";

    // now let's get our cookie for the download
    byte[] dataBytes = Encoding.UTF8.GetBytes(authData);
    string url = ssoServer + "/" + ssoAuthUrl;
    wr = (HttpWebRequest)HttpWebRequest.Create(url);

    //MyCookies is a CookieContainer I use to store the login cookies
    wr.CookieContainer = MyCookies;
    wr.Method = "POST";
    wr.ContentLength = dataBytes.Length;
    wr.ContentType = "application/x-www-form-urlencoded";
    Stream dataStream = wr.GetRequestStream();
    dataStream.Write(dataBytes, 0, dataBytes.Length);
    dataStream.Close();
    response = wr.GetResponse();
    response.Close();

    if (wr.CookieContainer.Count > 0)
    {
      IsLoginSuccessful = true;
    }
  }

我想知道是否有办法使用WebClient或从中继承的类来获取cookie而不是使用HttpRequest?

1 个答案:

答案 0 :(得分:1)

  

获取cookie而不是使用HttpRequest?

Cookie是HttpRequest

的属性
int loop1, loop2;
HttpCookieCollection MyCookieColl;
HttpCookie MyCookie;

MyCookieColl = Request.Cookies;

// Capture all cookie names into a string array.
String[] arr1 = MyCookieColl.AllKeys;

// Grab individual cookie objects by cookie name. 
for (loop1 = 0; loop1 < arr1.Length; loop1++) 
{
   MyCookie = MyCookieColl[arr1[loop1]];
   Response.Write("Cookie: " + MyCookie.Name + "<br>");
   Response.Write ("Secure:" + MyCookie.Secure + "<br>");

   //Grab all values for single cookie into an object array.
   String[] arr2 = MyCookie.Values.AllKeys;

   //Loop through cookie Value collection and print all values. 
   for (loop2 = 0; loop2 < arr2.Length; loop2++) 
   {
      Response.Write("Value" + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
   }
}