Проблема httpWebRequest - вопрос №83528

Здравствуйте, возникла следующая проблема: делаю запрос к серверу через httpWebRequest

static void Main(string[] args)

 { 

          var httpWebRequest = (HttpWebRequest)WebRequest.Create(«www.google.ru/sorry/Captcha?continue=http%3A%2F%2Fwww.google.ru%2Fsearch%3Fq%3D%25D1%2581%25D0%25B5%25D0%25BE%25D0%25BF%25D1%2583%25D0%25BB%25D1%258C%25D1%2582%25D1%2583%25D1%2581%26channel%3Dlinkdoctor&id=10783499217868175628&captcha=2119579&submit=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C»);           

httpWebRequest.AllowAutoRedirect = true;   

httpWebRequest.CookieContainer = new CookieContainer();   

 if (Cooks != null)

{              

httpWebRequest.CookieContainer.Add(Cooks); 

}           

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();         httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);   

{            

  Cooks.Add(httpWebResponse.Cookies);

Stream stream = httpWebResponse.GetResponseStream(); 

if (stream != null) 

 

 var reader = new StreamReader(stream); 

 Console.Write(reader.ReadToEnd());  

  } 

}

Возникает исключение и соединение закрывается.

Как можно проигнорировать ошибку и получить данные с сервера?

24.05.11
3 ответа

Лучший ответ по мнению автора

для начала разберитесь в чем суть изменений вот в таком варианте )))

(все работает, в тч с русскими именами, но просто ломает по строкам опять разбивать, просто скопируйте весь код в студию, там легче отформатировать красиво)

(проверил — не факт что скопируется хорошо ((( подчищаю )

(подправил, получилась ошибка, устраняю )))

(последняя правка, правильно говорят что лень=двигатель прогресса ))) чуть чуть упростил работу по выбору урл для проверки отработки с исключением и без )

(и слегка продолжил на тему обработки ;))) )

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.IO;

using System.Windows.Forms;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string[] urls =

{

www.google.ru/sorry/Captcha?continue=http%3A%2F%2Fwww.google.ru%2Fsearch%3Fq%3D%25D1%2581%25D0%25B5%25D0%25BE%25D0%25BF%25D1%2583%25D0%25BB%25D1%258C%25D1%2582%25D1%2583%25D1%2581%26channel%3Dlinkdoctor&id=10783499217868175628&captcha=2119579&submit=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C»,

@«yandex.ru/blablabla-page.html»,

yandex.ru»

};

HttpWebRequest MyWebRequest;

HttpWebResponse MyWebResponse = null;

Stream stream = null;

MyWebRequest = (HttpWebRequest)WebRequest.Create(urls[0]);

MyWebRequest.AllowAutoRedirect = true;

MyWebRequest.CookieContainer = new CookieContainer();

//if (Cooks != null) // ?????????

//{

//    MyWebRequest.CookieContainer.Add(Cooks);

//}

try

{

MyWebResponse = (HttpWebResponse)MyWebRequest.GetResponse(); // exception ??? 503 —  captcha ???

MyWebResponse.Cookies = MyWebRequest.CookieContainer.GetCookies(MyWebRequest.RequestUri);

//{

//    Cooks.Add(MyWebResponse.Cookies);

//}

stream = MyWebResponse.GetResponseStream();

}

catch (WebException мое_исключение_в_котором_информация_об_ошибке)

{

bool прочитали_книжки = false;

if (прочитали_книжки)

{

MessageBox.Show(мое_исключение_в_котором_информация_об_ошибке.Message);

}

else

{

MessageBox.Show(«Книжки надо читать! ;)))»);

}

}

if (stream != null)

{

var reader = new StreamReader(stream);

Console.Write(reader.ReadToEnd());

}

}

}

}

25.05.11
Лучший ответ по мнению автора

Другие ответы

если до завтрашнего вечера ни кто не откликнется, а проблема не будет решена — обращайтесь в чат, попробуем разобраться. раньше к сожалению не смогу, пока занят

24.05.11

1 — C# некоторые комбинации символов типа /n (новая строка) обрабатывает как служебные. с учетом того что типичные URL содержат символ / рекомендую использовать такой формат:

@«текст строки в котором /n просто /n»

в строке после знака @ служебные комбинации символов игнорируются

2 — url http запроса следуе начинать с префикса протокола, в данном случае это должно выглядеть примерно так:

@«http://www.google.ru...<продолжение строки запроса>»

3  - по стандарту языка HttpWebRequest и httpWebRequest уже будут различными именами, но читаемость очень сильно ухудшается, все таки не следует в качестве идентефикатора переменной использовать имя типа, лучше смысловое изменеие. вместо

var httpWebRequest = (HttpWebRequest)WebRequest.Create(...

стоит писать что то типа такого

var MyhttpWebRequest = (HttpWebRequest)WebRequest.Create(...

или

var SpecialRequest = (HttpWebRequest)WebRequest.Create(...

тоже и здесь

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

4 — не понятно происходение Cooks, код в таком виде естественно не компилируется

5 — в сообщении исключения указано что сервер возвращает код 503 — «сервер недоступен», хотя просто в браузере ссылка открывается но там возникает форма воода ответа на капчу. исключение вызвано именно этим, для проверки создаем урл на заведомо не существующую страницу и получаем исклучение с кодом возврата 404, что соответвует действительности. что бы избежать аварийного завершения программы следует писать свой обработчик исключений, но за подробностями обращайтесь к msdn )))… (за отдельную плату можем позаниматься вместе )))

вот в таком виде код компилируется и исполняется без ошибок:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Net;

using System.IO;

namespace ConsoleApplication1 {

class Program {

static void Main(string[] args)

{

string problemUrl = @«www.google.ru/sorry/Captcha?continue=http%3A%2F%2Fwww.google.ru%2Fsearch%3Fq%3D%25D1%2581%25D0%25B5%25D0%25BE%25D0%25BF%25D1%2583%25D0%25BB%25D1%258C%25D1%2582%25D1%2583%25D1%2581%26channel%3Dlinkdoctor&id=10783499217868175628&captcha=2119579&submit=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C»; 

string MyUrl = @«yandex.ru»;

string _404_url = @«yandex.ru/blablabla-page.html»;

var MyWebRequest = (HttpWebRequest)WebRequest.Create(MyUrl);

MyWebRequest.AllowAutoRedirect = true;

MyWebRequest.CookieContainer = new CookieContainer();

//if (Cooks != null)        // ?????????

//{

//    MyWebRequest.CookieContainer.Add(Cooks);

//}

HttpWebResponse MyWebResponse = (HttpWebResponse)MyWebRequest.GetResponse();

MyWebResponse.Cookies = MyWebRequest.CookieContainer.GetCookies(MyWebRequest.RequestUri);

//{

//    Cooks.Add(MyWebResponse.Cookies);

//}

Stream stream = MyWebResponse.GetResponseStream();

if (stream != null)

{

var reader = new StreamReader(stream);

Console.Write(reader.ReadToEnd());

}

}

}

}

// редактор этого сайта очень не дружит с простым текстом ))) форматирование студии теряется, увы

25.05.11
Посмотреть всех экспертов из раздела Технологии > .Net/C#
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store