c#通過檔案儲存體 調用cookies的代碼

來源:互聯網
上載者:User
最近研究paperpass 論文檢測系統 登入的時候 考慮到需要把登入資訊

 儲存下來,但是c#不想php,有這個功能,不能把cookies儲存文本,並發送到伺服器,所以就寫了一段代碼

顯示 get 的方式擷取網頁的原始碼 1 /// <summary>

 2         /// 擷取頁面的html代碼
 3         /// </summary>
 4         /// <param name="URL">地址</param>
 5         /// <param name="Referer">來路</param>
 6         /// <param name="Cookies">cookies</param>
 7         /// <returns></returns>
 8         protected string getHtml(string URL, string Referer, string CookiesFile ,bool AutoRe)//擷取指定地址的源檔案
 9         {
10             HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(URL);
11             CookieContainer Cookies = null;
12             if (!String.IsNullOrEmpty(CookiesFile)&&File.Exists(CookiesFile))
13             {
14                 Cookies = getCookieContainer(CookiesFile);
15                
16                 getRequest.CookieContainer = Cookies;
17             }
18             getRequest.Accept = "*/*";
19             getRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1;)";
20             getRequest.KeepAlive = false;
21             getRequest.AllowAutoRedirect = AutoRe;
22             if (!String.IsNullOrEmpty(Referer))
23             {
24                 getRequest.Referer = Referer;
25             }
26             try
27             {
28                 HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
29                 string[] LocationUlr = getResponse.Headers.GetValues("Location");
30 
31                 if (Cookies != null && getResponse.Cookies.Count>0)
32                 {
33                     Cookies.Add(getResponse.Cookies);
34                     //儲存Cookies檔案
35                     saveCookieContainer(Cookies, CookiesFile);
36                 }
37                 //如果是轉向的
38                 if (!AutoRe && LocationUlr != null && LocationUlr.Length > 0)
39                 {
40                     getResponse.Close();
41                     return LocationUlr[0];
42                 }
43                 StreamReader readStream = new StreamReader(getResponse.GetResponseStream(), Encoding.UTF8);
44                 var TheHtml = readStream.ReadToEnd();
45                 readStream.Close(); readStream.Dispose();              
46                 getResponse.Close();
47                 
48                 return TheHtml;
49             }
50             catch (Exception E)
51             {
52                 writeLog(E.ToString(), ownsHttpContext.Server.MapPath("/"));
53                 return null;
54             }
55             finally
56             {
57                 getRequest.Abort();
58             }
59         }

其中的getCookieContainer函數 從檔案讀取
CookieContainer  ,saveCookieContainer函數把CookieContainer儲存到檔案!

兩個函數如下  /// <summary>

        /// 遍曆CookieContainer
        /// </summary>
        /// <param name="cc"></param>
        /// <returns></returns>
        public static List<Cookie> GetAllCookies(CookieContainer cc)
        {
            List<Cookie> lstCookies = new List<Cookie>();

            Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
                System.Reflection.BindingFlags.Instance, null, cc, new object[] { });

            foreach (object pathList in table.Values)
            {
                SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list",
                    System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
                    | System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
                foreach (CookieCollection colCookies in lstCookieCol.Values)
                    foreach (Cookie c in colCookies) lstCookies.Add(c);
            }
            return lstCookies;
        }
/// <summary>
        /// 把cookieContainer儲存到檔案
        /// </summary>
        /// <param name="Cookies">需要寫入的CookieContainer</param>
        /// <param name="cookieFile">儲存到什麼檔案</param>
        private static void saveCookieContainer(CookieContainer Cookies, string cookieFile)
        {

            StringBuilder SB = new StringBuilder();
            if (Cookies == null || Cookies.Count == 0) { return; }
            //檢測目錄是否存在
            if (!File.Exists(cookieFile))
            {
                FileInfo cookieFileInfo = new FileInfo(cookieFile);
                if (!cookieFileInfo.Directory.Exists)
                {
                    cookieFileInfo.Directory.Create();
                }
            }
            List<Cookie> CClist = GetAllCookies(Cookies);
            foreach (Cookie Cookie in CClist)
            {
                SB.AppendFormat("{0}|,|{1}|,|{2}|,|{3}|,|{4}\r\n", Cookie.Name, Cookie.Value, Cookie.Expires.Ticks, Cookie.Domain, Cookie.Path);
            }
            File.WriteAllText(cookieFile, SB.ToString());
        }
        /// <summary>
        /// 從檔案擷取cookies
        /// </summary>
        /// <param name="cookieFile">cookie儲存的檔案</param>
        /// <returns></returns>
        private static CookieContainer getCookieContainer(string cookieFile)
        {
            CookieContainer returnCookieContainer = new CookieContainer();
            if (!File.Exists(cookieFile))
            {
                return returnCookieContainer;
            }
            string[] CookieStrS = File.ReadAllLines(cookieFile);

            foreach (string CookieStr in CookieStrS)
            {
                string[] TempStrS = CookieStr.Split(new string[] { "|,|" }, StringSplitOptions.RemoveEmptyEntries);
                if (TempStrS.Length < 5)
                {
                    continue;
                }
                Cookie CookieTemp = new Cookie();
                CookieTemp.Name = TempStrS[0];
                CookieTemp.Value = TempStrS[1];
                CookieTemp.Expires = new DateTime(Convert.ToInt64(TempStrS[2]));
                CookieTemp.Domain = TempStrS[3];
                CookieTemp.Path = TempStrS[4];
                returnCookieContainer.Add(CookieTemp);
            }
            return returnCookieContainer;
        }

經過測試可以正常使用 ,裝載請註明出處 http://www.cnblogs.com/mutuan/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.