Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Webrequest не работает cо второго раза 
V
    Опции темы
wester
Дата 28.8.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



Доброго времени суток.
помогите разобраться. 
при первом запросе, когда нужно построить корень дерева ссылок я его спокойно получаю, 
но когда я пытаюсь по одной из ссылок проследовать то меня ждет WebException ( таймаут при получении ответа)
грешил, что проблемы с сетью - нет проблем, попробовал подключиться через прокси fiddler ("localhost:8888") и все работает !
все работает как надо. 

вот код
Код

private void GetCategoryHtmlResponseWithoutProxy(WebResponse response)
        {
            var request = (HttpWebRequest) WebRequest.Create(response.ResponseUri.AbsoluteUri);
            request.UserAgent = UserAgentChrome7;
            request.Accept = AcceptString; 
            request.Proxy = new WebProxy("localhost:8888");
           // request.Proxy = WebProxy.GetDefaultProxy();

            
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "GET";
            request.UseDefaultCredentials = true;
            WebResponse webResponse = null;
            try
            {
                webResponse = request.GetResponse();
            }
            catch (WebException exc)
            {
                Debug.WriteLine(exc.Status);
                Debug.WriteLine(exc.Response);
                throw new WebException("exc");
            }
            
            WebResponce = webResponse;


причем самое удивительное - метод первый раз без прокси отрабатывает, а вот последующий раз не хочет - только с прокси


Это сообщение отредактировал(а) wester - 28.8.2010, 20:06
PM MAIL   Вверх
diadiavova
Дата 29.8.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



А что ты делаешь в последней строчке? smile 

А вообще, попробуй в конце метода написать
Код

webResponse.Close();



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
wester
Дата 29.8.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



diadiavova, 
WebResponse у меня поле класса, которое я уже передаю в другой класс.
закрыть я его не могу - так как получу эксепшн из - за освобожденного ресурса.

я думал проблема с параметром 
переделал под 

Код

private void GetCategoryHtmlResponseWithoutProxy(string param)
        {
            var request = (HttpWebRequest)WebRequest.Create(param);
            request.UserAgent = Firefox368;
            request.Accept = AcceptString;
            request.AllowAutoRedirect = true;

            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "GET";
            request.SendChunked = true;
            request.AllowAutoRedirect = true;
            HttpWebResponse webResponse;
            try
            {
                 webResponse = (HttpWebResponse)request.GetResponse(); // вот тута у меня WebException по таймауту
                Debug.WriteLine(webResponse.StatusCode);
                Debug.WriteLine(webResponse.StatusDescription);
                
                

            }
            catch (WebException exc)
            {
                Debug.WriteLine(exc.Status);
                Debug.WriteLine(exc.Response);
                throw new WebException("exc");
            }

            WebResponse = webResponse;
            GetHtmlFromResponse(); // метод, который из WebResponse получает исходник страницы, который я передам в другой класс
            webResponse.Close(); // буду передавать не WebResponse, а строку с исходником html


Код

public void GetHtmlFromResponse()
        {

            String htmlSource;
            using (var sr = new StreamReader(WebResponse.GetResponseStream(), Encoding.UTF8))
            {
                htmlSource = sr.ReadToEnd();
            }
            HtmlSource = htmlSource;
            WebResponse.Close(); // здесь я закрываю WebResponse
        }

меня больше удивляет почему когда запущен Fiddler я могу работать, а когда не работает не могу

Это сообщение отредактировал(а) wester - 29.8.2010, 11:10
PM MAIL   Вверх
diadiavova
Дата 29.8.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(wester @  29.8.2010,  11:58 Найти цитируемый пост)
WebResponse у меня поле класса, которое я уже передаю в другой класс.

Зачем?
Цитата(wester @  29.8.2010,  11:58 Найти цитируемый пост)
GetHtmlFromResponse(); // метод, который из WebResponse получает исходник страницы, который я передам в другой класс

А не проще ли этому методу параметр прикрутить?
Цитата(wester @  29.8.2010,  11:58 Найти цитируемый пост)
webResponse.Close(); // буду передавать не WebResponse, а строку с исходником html

 smile 
Цитата(wester @  29.8.2010,  11:58 Найти цитируемый пост)
меня больше удивляет почему когда запущен Fiddler я могу работать, а когда не работает не могу

Потому  что ты отправляешь запрос локальному серверу, а тот в свою очередь отправляет такой же запрос куда надо, только фиддлер закрывает соединение.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
wester
Дата 29.8.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



diadiavova, 
спасибо, разобрался теперь как работает Fiddler.

все оказалось очень просто 
оказывается надо было обрабатывать запрос сразу, а не посылыть второй реквест на ту же страницу

в итоге получилось

Код

public void GetResponseWithoutProxy(String url)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.UserAgent = UserAgentChrome7;
            request.Accept = AcceptString;
            var response = request.GetResponse();
            if (DetectAdress(response.ResponseUri.PathAndQuery))
            {
                GetVendorHtmlResponseWithoutProxy(response);
                
                IsVendorList = true;
                
            }
            else
            {
                GetHtmlFromResponse(response); // получаем строку с сорцом

                IsVendorList = false;
                
            }
        }


проблема решена
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.