Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > исчезает ContentLength


Автор: wester 24.12.2010, 18:56
Доброго времени суток.
написал код для авторизации на rutracker
Код

 public void Login()
        {
            #region get-cookie

            var webRequest = (HttpWebRequest)WebRequest.Create("http://login.rutracker.org/forum/login.php");
            webRequest.UserAgent =
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
            webRequest.Accept =
                "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webRequest.SendChunked = true;
            webRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
            webRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7");
            webRequest.TransferEncoding = "gzip,deflate";
            webRequest.Method = "POST";
            webRequest.KeepAlive = true;
            webRequest.Timeout = 5000;
            webRequest.AllowAutoRedirect = false;
            webRequest.Referer = "http://rutracker.org/forum/index.php";
            const string pwd = "1";
            const string user = "1";
            var postdata = String.Format("login_username={0}&login_password={1}&login={2}", HttpUtility.UrlEncode(user), HttpUtility.UrlEncode(pwd), "%C2%F5%EE%E4");
            var bPostdata = Encoding.ASCII.GetBytes(postdata);
            webRequest.ContentLength = bPostdata.Length; //
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Host = "login.rutracker.org";
           webRequest.GetRequestStream().Write(bPostdata, 0, bPostdata.Length);


            var webResp = (HttpWebResponse) webRequest.GetResponse(); //
            var cookie = webResp.Headers["Set-Cookie"];
            Console.WriteLine(webResp.StatusCode);
            #endregion
            

            Console.WriteLine(webResp.Headers["Status"]);

            #region
            webRequest = (HttpWebRequest) WebRequest.Create("http://rutracker.org/forum/index.php");
            webRequest.Proxy = new WebProxy("localhost", 8888);
            webRequest.UserAgent =
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
            webRequest.Accept =
                "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webRequest.SendChunked = true;
            webRequest.TransferEncoding = "gzip,deflate";
            webRequest.Method = "GET";
            webRequest.Headers.Add(HttpRequestHeader.KeepAlive,"115");
            
            webRequest.AllowAutoRedirect = true;
            webRequest.Referer = "http://rutracker.org/forum/index.php";
            webRequest.Headers.Add(HttpRequestHeader.Cookie,cookie);
            webResp = (HttpWebResponse) webRequest.GetResponse(); 
            var streamReader = new StreamReader(webResp.GetResponseStream());
            Console.WriteLine(streamReader.ReadToEnd());
            #endregion




        }

но когда я дохожу до строки 29 то получаю WebException с текстом "Удаленный сервер возвратил ошибку: (411) Требуется длина."
смотрю fiddler который слушает мое приложение и действительно поле "Content-Length" не передается. 
хотя я его передавал в 23  строке. Что за глюк ? 
писал код основываясь на http://forum.vingrad.ru/forum/topic-291628/unread-1/hl/rutracker/index.html и http://kbyte.ru/ru/Programming/Articles.aspx?id=42&mode=art

Автор: wester 24.12.2010, 20:27
глюк был в том, что я отправлял 
// webRequest.SendChunked = true;
// webRequest.TransferEncoding = "gzip,deflate";

как это могло повлиять уму не приложу.
как пойму, тему помечу решенной

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)