Получение каптчи с помощью HttpWebRequest - вопрос №313005

пытаюсь выполнить регистрацию на сайте http://pepsilight.ru с помощью HttpWebRequest.

вот код:

public class clientOptions<br /> {<br /> public string patternImage = @"mycaptcha/image/[\d\w]{32}";<br /> public string firstStep = "pepsilight.ru";<br /> public string secondStep = "pepsilight.ru/user/register";<br />public string adresIMG = "pepsilight.ru/";<br /> public string captchaAdres = "pepsilight.ru/";<br /> //public string MyProxy = "127.0.0.1";<br /> //public int myPort = 8888;<br /> public string MyUserAgent = "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 /> public string MyAccept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*";<br /> public string MyHeaders = "Accept-Language";<br /> public string MyHeaders1 = "ru-RU";<br /> }<br /> <br /> <br /> public class registredWithCaptcha<br /> {<br /> clientOptions clOptions = new clientOptions();<br /> public CookieCollection cookiesPepsi = new CookieCollection();<br /> string myStr = "";<br /> <br /> public void FirstStep()<br /> {<br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(clOptions.firstStep);<br /> //myHttpWebRequest.Proxy = new WebProxy(clOptions.MyProxy, clOptions.myPort);<br /> myHttpWebRequest.UserAgent = clOptions.MyUserAgent;<br /> myHttpWebRequest.Accept = clOptions.MyAccept;<br /> myHttpWebRequest.Headers.Add(clOptions.MyHeaders, clOptions.MyHeaders1);<br /><br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /> if (myHttpWebResponse != null)<br /> {<br /> cookiesPepsi.Add(myHttpWebResponse.Cookies);<br /> }<br /> }<br /><br /> public string SecondStep()<br /> {<br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(clOptions.secondStep);<br /> //myHttpWebRequest.Proxy = new WebProxy(clOptions.MyProxy, clOptions.myPort);<br /> myHttpWebRequest.UserAgent = clOptions.MyUserAgent;<br /> myHttpWebRequest.Accept = clOptions.MyAccept;<br /> myHttpWebRequest.Headers.Add(clOptions.MyHeaders, clOptions.MyHeaders1);<br /> myHttpWebRequest.CookieContainer = new CookieContainer();<br /> myHttpWebRequest.CookieContainer.Add(cookiesPepsi);<br /> myHttpWebRequest.Referer = "pepsilight.ru/";<br /><br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /> if (myHttpWebResponse != null)<br /> {<br /> cookiesPepsi.Add(myHttpWebResponse.Cookies);<br /> }<br /><br /> StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));<br /> myStr = myStreamReader.ReadToEnd();<br /> clOptions.captchaAdres += Regex.Match(myStr, clOptions.patternImage).ToString();<br /> return myStr;<br /> }<br /><br /> public string getCaptcha()<br /> {<br /> HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(clOptions.captchaAdres);<br /> //myHttpWebRequest.Proxy = new WebProxy(clOptions.MyProxy, clOptions.myPort);<br /> myHttpWebRequest.UserAgent = clOptions.MyUserAgent;<br /> myHttpWebRequest.Accept = "*/*";<br /> myHttpWebRequest.Headers.Add(clOptions.MyHeaders, clOptions.MyHeaders1);<br /> myHttpWebRequest.Referer = "pepsilight.ru/user/register";<br /> <br /> myHttpWebRequest.CookieContainer = new CookieContainer();<br /> myHttpWebRequest.CookieContainer.Add(cookiesPepsi); <br /><br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();<br /> if (myHttpWebResponse != null)<br /> {<br /> cookiesPepsi.Add(myHttpWebResponse.Cookies);<br /> } <br /> <br /> return clOptions.adresIMG + Regex.Match(myStr, clOptions.patternImage).ToString();<br /> }<br /> }в результате адрес каптчи получаю, но вот само изображение не грузится, в чем может быть проблема?
26.07.12
1 ответ

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

поясните что делают все три функции?

на первый взгляд SecondStep должна вернуть адрес картинки

но тогда Вам надо скачать картинку, вероятно это задача getCaptcha, но Вы там опять что то парсите, вместо того что бы попытаться извлечь картинку

ps так как в getCaptcha запрос идет на captchaAdres, стрим и должен уже содержать картинку

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

надо извлекать картинку из стрима полученного в getCaptcha

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