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


Автор: Most 17.11.2010, 02:46
Здравствуйте. Помогите разобраться новичку. Вообщем написал я небольшую програмку, которая может авторизироваться на сайте и отправлять пользователям сообщения. Писал с помощью классов httpwebrequest httpwebresponse. Все в принципе работает... Есть только одно НО. после отправки двух сообщений подряд одному пользователю, прога заглючивает, и заглючивает именно когда пытаюсь получить ответ от сервера.
Код

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();


<-- вот на этой строке. Вопрос собсвенно в том почему так происходит? Тоесть может мне стоит както перестроить алгоритм программы, или же на сервере система безопастности не пропускает какоето количество сообщений от одного пользователя за определенный интервал времени?


а вот код отправки сообщения
Код

 
public void send_message(string message, string title)
        {
            LoadProfile("Готовимся к запросу на страничку с сообщениями...", output);
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http:\\url?&parameter1="+message+"&parameter2="+title);
            
            httpWebRequest.AllowAutoRedirect = true;
            httpWebRequest.Method = "POST";
            httpWebRequest.UseDefaultCredentials = true;
            httpWebRequest.CookieContainer = new CookieContainer();
            if (Cooks != null)
            {
                //Добавляем к нашему запросу ранее сохраненную сессию
                httpWebRequest.CookieContainer.Add(Cooks);
                
            }
            var buffer = Encoding.ASCII.GetBytes(message+title);
            httpWebRequest.ContentLength = 0;
            
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            LoadProfile("Получили ответ...", output);
            httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
            if (httpWebResponse.Cookies != null)
            {
                //Обновляем сессию
                Cooks.Add(httpWebResponse.Cookies);
            }
            Stream stream = httpWebResponse.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.Default);
            
        }

Автор: i2m 17.11.2010, 16:57
Хм вообще не пойму как это работает... 

Цитата

var buffer = Encoding.ASCII.GetBytes(message+title);

Толку от этого если это не используется даже?

Цитата

httpWebRequest.ContentLength = 0;

Как длинна запроса может быть 0? Длинна запроса должна быть buffer.Length

Цитата

Stream stream = httpWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.Default);

Опять же если это дальше не используется то зачем оно вообще?

Где сама отправка запроса? Это вообще получается не POST, а тогда GET, в общем черт знает что нагородили вы smile Где закрытие потоков? 
Ваши потребности можно решить в пару строк, просто GET запросом, а если нужен еще ответ, то и его добавить.

Код

        public static string GetRequest(string url)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);

            string answer;
            using (var response = (HttpWebResponse)request .GetResponse())
            {
                using (var sr = new StreamReader(response.GetResponseStream()))
                {
                    answer= sr.ReadToEnd();
                }
            }
            return answer;
        }

Куки только свои прикрутите и все.

Автор: Most 17.11.2010, 18:18
спасибо, разобрался, в моем коде много лишнего, потому что делал в первый раз много чего тестировал прост не удалил не нужные строки. А дело было действительно в том что не закрыл потоки)))

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