При первом запросе принять куки, а при втором отправить серверу - 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]; } } }