Работа с капчей через HttpWebRequest и HttpWebResponse - вопрос №311185

Здравствуйте. ситуация следующая — я хочу разобраться с работой HttpWebRequest и HttpWebResponse. Решил выполнить регистрацию на сайте pepsilight.ru (выбран был случайный сайт, предоставляющий возможность вести блог и имеющий капчу). проблема в следующем — не могу скопировать изображение капчи. т.е. я сначала захожу на главную страницу, затем перехожу на страницу регистрации, там выполняется 2 get запроса — самой страницы и капчи.Выполняюипервый, и второй. В итоге после выполнения get запроса страницы регистрации получаю код страницы и оттуда вытягиваю ссылку на капчу. Затем использую ссылку для присвоения ее в элемент Image.ImageUrl (элемент asp.net), но само изображение не отображается. На самом сайте (pepsilight) правой кнопкой мыши клацаю на капче — открыть изображение в др. вкладке — открывает. Но в чем проблема не пойму.

вот код:

public class registeredPepsilightRu<br /> {<br /> public string mystr = "";<br /><br /> public string patternImage = @"mycaptcha/image/[\d\w]{32}";//?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?+?";<br /><br /> public string firstStep()<br /> {<br /> string sCookie="";<br /><br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://pepsilight.ru");<br /> myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888);<br /> myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";<br /> myHttpWebRequest.Accept = "*/*";<br /> myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU");<br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /><br /> if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))<br /> {<br /> sCookie = myHttpWebResponse.Headers["Set-Cookie"];<br /> }<br /><br /> return sCookie;<br /> }<br /><br /> public string secondStep(string sCookie)<br /> {<br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://pepsilight.ru/user/register");<br /> myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888);<br /> myHttpWebRequest.Referer = "pepsilight.ru/";<br /> myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";<br /> myHttpWebRequest.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*";<br /> myHttpWebRequest.Headers.Add("Accept-Language", "ru");<br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /> <br /> if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))<br /> {<br /> sCookie = myHttpWebResponse.Headers["Set-Cookie"];<br /> }<br /><br /> // выводим результат в консоль<br /> StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));<br /> //получение строки с результирующей страницей<br /> mystr = myStreamReader.ReadToEnd();<br /><br /> return sCookie;<br /> }<br /><br /> public string getCapcha(string sCookie)<br /> {<br /> string adresImg="";<br /><br /> <br /><br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://pepsilight.ru/" + adresImg);<br /> myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888);<br /> myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";<br /> myHttpWebRequest.Accept = "*/*";<br /> myHttpWebRequest.Headers.Add("Accept-Language", "ru-RU");<br /> myHttpWebRequest.Referer = "pepsilight.ru/user/register";<br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /> string sCookies = "";<br /> if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))<br /> {<br /> sCookies = myHttpWebResponse.Headers["Set-Cookie"];<br /> }<br /> // выводим результат в консоль<br /> StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));<br /> //получение строки с результирующей страницей<br /> mystr = myStreamReader.ReadToEnd();<br />  adresImg = Regex.Match(mystr, patternImage).ToString();<br /><br /> return adresImg;<br /> } а это вызов:protected void Button1_Click(object sender, EventArgs e)<br /> {<br /> string sCookies;<br /> string username = tbLogin.Text;<br /> string password = tbPassword.Text;<br /> string country = tbMail.Text;<br /><br /> registratorBlog.registeredPepsilightRu regPepsilight_ru = new registratorBlog.registeredPepsilightRu();<br /> sCookies = regPepsilight_ru.firstStep(); <br /> sCookies = regPepsilight_ru.secondStep(sCookies);<br /> tbCapcha.Text = regPepsilight_ru.mystr;<br /><br /> imgCapcha.ImageUrl = "pepsilight.ru/" + regPepsilight_ru.getCapcha(sCookies); <br /> }

ну вот как-то так)

24.07.12
1 ответ

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

а не пробовали дебагером пользоваться?

что бы смотреть значения переменных, в частности что же Вы все таки извлекаете в качестве адреса картинки капчи

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

Виталий

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