Не пишет в httpWebRequest.GetRequestStream()
От: uranpro  
Дата: 20.07.10 13:06
Оценка:
Добрый день!
Задача: Сделать POST на сайт rutracker.org(залогиниться) =)
Вот что получилось
            var uid = "***";
            var pass = "***";
            var loginUrl = "http://login.rutracker.org/forum/login.php";
            var homeUrl = "http://rutracker.org/forum/index.php";
            var contentPath = Environment.CurrentDirectory + "\\postResponse.xml";

            var msg = new StringBuilder(String.Empty);
            var reqString = String.Format(@"login_username={0}&login_password={1}&login=%C2%F5%EE%E4", uid, pass);
            var requestData = win1251.GetBytes(reqString);
            var cc = new CookieContainer();

            var request = (HttpWebRequest)WebRequest.Create(loginUrl);
            request.AllowAutoRedirect = true;
            request.CookieContainer = cc;
            request.AllowWriteStreamBuffering = true;

            request.Method = "POST";

            request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6";
            request.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Headers.Add(@"Accept-Language: ru,en-us;q=0.7,en;q=0.3");
            request.Headers.Add(@"Accept-Encoding: gzip,deflate");
            request.Headers.Add(@"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7");
            request.Headers.Add(@"Keep-Alive: 115");
            request.Referer = homeUrl;
            request.ContentType = @"application/x-www-form-urlencoded";
            request.ContentLength = requestData.Length;
            request.KeepAlive = true;

            using (var requestStream = request.GetRequestStream())
                requestStream.Write(requestData, 0, requestData.Length);


POST отправляется, но в контенте пустота!
т.е. этот код не отрабатывается:

            using (var requestStream = request.GetRequestStream())
                requestStream.Write(requestData, 0, requestData.Length);


уверен на 100%!
Заголовки смотрел через прогу HTTPDebuggerPro.

помогите разобраться! мб какой-то баг?

VS2010 Ultimate v 10.0.30319.1 RTMRel
Re: Не пишет в httpWebRequest.GetRequestStream()
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.07.10 13:13
Оценка:
Здравствуйте, uranpro, Вы писали:

U>Добрый день!

U>Задача: Сделать POST на сайт rutracker.org(залогиниться) =)
U>Вот что получилось
U>POST отправляется, но в контенте пустота!
U>т.е. этот код не отрабатывается:

U>
U>            using (var requestStream = request.GetRequestStream())
U>                requestStream.Write(requestData, 0, requestData.Length);
U>


U>помогите разобраться! мб какой-то баг?

А где здесь request.GetResponse()?
U>VS2010 Ultimate v 10.0.30319.1 RTMRel
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Не пишет в httpWebRequest.GetRequestStream()
От: uranpro  
Дата: 20.07.10 13:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, uranpro, Вы писали:


U>>Добрый день!

U>>Задача: Сделать POST на сайт rutracker.org(залогиниться) =)
U>>Вот что получилось
U>>POST отправляется, но в контенте пустота!
U>>т.е. этот код не отрабатывается:

U>>
U>>            using (var requestStream = request.GetRequestStream())
U>>                requestStream.Write(requestData, 0, requestData.Length);
U>>


U>>помогите разобраться! мб какой-то баг?

S>А где здесь request.GetResponse()?
U>>VS2010 Ultimate v 10.0.30319.1 RTMRel

var webResponse = request.GetResponse();

            using (var responseStream = new StreamReader(webResponse.GetResponseStream(), win1251))
            {
                var content = responseStream.ReadToEnd();
                if (!string.IsNullOrEmpty(content))
                {
                    try
                    {
                        var doc = HtmlToXml(content);
                        doc.Save(contentPath);
                        xmlGridView1.DataFilePath = contentPath;
                    }
                    catch { }
                    return;
                }
            }


что-то непонятное творится, поставил вместо HttpDebuggerPro Fiddler, в Fiddler`e все нормально.
получается, что меня сайт не хочет пускать... сейчас разберусь.
Re: Не пишет в httpWebRequest.GetRequestStream()
От: uranpro  
Дата: 20.07.10 14:00
Оценка:
Проблем много.
У меня не получалось залогиниться на сайт через POST.
я узнавал это из ответа сервера, он был читабельный раньше!
скачал прогу HttpDebuggerPro, по логам увидел, что в requestStream не пишется инфа.
Долго мучился, лазил по форумам и т.д. Пока не нашел прогу Fiddler2 и установил ее)
Она показала, что запись в поток все таки происходит. Но теперь ответ от сервера приходит в какой-то другой кодировке(после установки проги) !
я и не знаю как мне быть теперь. пойду напьюсь сегодня
Re: Не пишет в httpWebRequest.GetRequestStream()
От: uranpro  
Дата: 20.07.10 14:07
Оценка:
и еще, после POST в ответе есть Cookie, которые у меня хранятся в cc(CookieContainer).
далее редирект, в GET куки куда-то пропадают.
Re: Не пишет в httpWebRequest.GetRequestStream()
От: uranpro  
Дата: 20.07.10 14:15
Оценка:
http://ipicture.ru/uploads/100720/UCU2uNIV2U.jpg
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.