При первом запросе принять куки, а при втором отправить серверу - C#

Узнай цену своей работы

Формулировка задачи:

Пожалуйста скажите достаточно ли этого кода, чтобы при первом запросе принять куки, а при втором если потребуеться отправить серверу (отправляет ли требуемые куки HttpWebRequest серверу сам или нужно это делать самому)?
CookieContainer cookie = new CookieContainer();
Request.CookieContainer = cookie;
step2(ref cookie);
}
/////////////Здесь step2 :)//////////////////
Request.CookieContainer = cookie;

Решение задачи: «При первом запросе принять куки, а при втором отправить серверу»

textual
Листинг программы
private string _referer;
private CookieContainer _cookies = new CookieContainer();
 
private HttpWebResponse _Request(String url, RequestMethod requestMethod, String content)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.ProtocolVersion = new Version(1, 0);
            if (requestMethod == RequestMethod.POST)
                request.Method = "POST";
            if (!String.IsNullOrEmpty(this._referer))
                request.Referer = this._referer;
 
            request.AllowAutoRedirect = false;
 
            // заголовки вставляем
 
            request.CookieContainer = this._cookies;
            if (!String.IsNullOrEmpty(content))
            {
                byte[] bytesArray = Encoding.UTF8.GetBytes(System.Web.HttpUtility.UrlPathEncode(content));
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = bytesArray.LongLength;
                request.GetRequestStream().Write(bytesArray, 0, bytesArray.Length);
            }
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 
            request = null;
 
            this._BugFix_CookieDomain(this._cookies);
 
            if (!String.IsNullOrEmpty(response.Headers[HttpResponseHeader.Location]))
            {
                String location = response.Headers[HttpResponseHeader.Location];
                this._Request(location);
            }
            return response;
        }
        private void _BugFix_CookieDomain(CookieContainer cookieContainer)
        {
            System.Collections.Hashtable table = (System.Collections.Hashtable)cookieContainer.GetType().InvokeMember("m_domainTable",
                System.Reflection.BindingFlags.NonPublic |
                System.Reflection.BindingFlags.GetField |
                System.Reflection.BindingFlags.Instance,
                null,
                cookieContainer,
                new object[] { }
            );
            System.Collections.ArrayList keys = new System.Collections.ArrayList(table.Keys);
            foreach (string keyObj in keys)
            {
                string key = (keyObj as string);
                if (key[0] == '.')
                {
                    string newKey = key.Remove(0, 1);
                    table[newKey] = table[keyObj];
                }
            }
        }

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы